Linux下仅复制文件至目标目录并清空原有内容的命令方案
解决Linux下指定文件复制并清空目标目录的问题
我来帮你搞定这个需求,分两种常用方法详细说明:
一、使用cp命令实现
要完成清空目标目录原有内容 + 仅复制源目录文件的操作,需要分两步执行:
- 先清空目标目录的所有内容(包括文件和子文件夹):
rm -rf ~/folder2/subfolder2/*
注意:
-rf参数会强制删除所有内容,执行前请确认目标目录路径正确,避免误删重要文件。
- 再复制源目录中的所有文件(不含子文件夹)到目标目录:
cp ~/folder1/subfolder1/* ~/folder2/subfolder2/
如果源目录包含隐藏文件(以
.开头的文件),上面的*不会匹配到它们。要包含隐藏文件的话,可以先开启shell的dotglob选项:shopt -s dotglob cp ~/folder1/subfolder1/* ~/folder2/subfolder2/执行完后如果想关闭
dotglob,可以运行shopt -u dotglob。
二、使用rsync命令实现
你之前遇到的错误是因为--delete参数需要配合递归相关的参数(-r或-d),但我们可以通过排除子目录的方式,既满足--delete的要求,又不复制子文件夹。
推荐的命令如下:
rsync -r --delete --exclude='*/' ~/folder1/subfolder1/ ~/folder2/subfolder2/
参数解释:
-r:开启递归模式(这是--delete必须的前提)--exclude='*/':排除所有子目录,这样rsync只会处理源目录下的文件,不会进入子文件夹--delete:删除目标目录中存在但源目录中没有的内容(包括文件和子文件夹),正好实现清空原有内容的效果- 源路径末尾的
/:表示复制源目录内部的内容,而不是源目录本身,这一点很重要
这个命令的优势:
- 自动处理隐藏文件,不需要额外设置
- 如果源目录文件有更新,后续执行只会复制变化的文件,效率更高
- 相比
rm + cp的组合,更安全(比如如果源目录为空,rm -rf不会误删目标目录本身,而rsync --delete只会清空内容)
内容的提问来源于stack exchange,提问作者Leff
相关产品推荐
相关产品推荐

