终端合并文件夹覆盖/留存重复文件 使用mv命令是否可行?
问题解答
原命令可行性判断
你提供的mv /X/ /Y/命令无法达到预期效果,原因如下:
- 首先路径错误:
/X/指代系统根目录下的X文件夹,你当前在rita目录下操作,要指向当前目录的X应该用./X/ - 其次mv的逻辑限制:如果目标目录Y已存在,mv会直接将整个X文件夹移入Y内部,最终你得到的结构是
Y/X/下存放所有X原有内容,不会发生子目录和文件的合并,和你的需求完全不符。
需求1:重复文件直接覆盖
使用rsync命令一行即可实现,无需复杂脚本,也不会额外复制占用双倍空间:
- 执行同步合并命令,将X内所有内容移入Y,重名文件直接覆盖:
rsync -a --remove-source-files ./X/ ./Y/
- 同步完成后删除残留的空X目录:
rm -rf ./X/
参数说明:
-a:归档模式,递归处理子目录,保留文件权限、时间戳等所有属性--remove-source-files:同步成功后删除源文件,等效于移动操作,满足你不想用cp命令的要求- 注意路径末尾的斜杠不可省略:
./X/表示同步X目录内部的内容,而非整个X文件夹本身
需求2:重复文件重命名留存
仅需要给rsync添加备份参数即可实现自动重命名:
- 执行同步合并命令,重名文件自动加
copy后缀留存:
rsync -a --remove-source-files --backup --suffix=" copy" ./X/ ./Y/
- 同步完成后删除残留的空X目录:
rm -rf ./X/
参数说明:
--backup:遇到重名文件时不直接覆盖,对目标目录原有文件做备份留存--suffix=" copy":指定备份文件的后缀为copy,完全匹配你需要的重命名规则,重名的foo.txt会保留为foo copy.txt,重名的folder1会保留为folder1 copy,不会丢失任何文件。
内容的提问来源于stack exchange,提问作者rita1989
相关产品推荐
相关产品推荐

