我正在尝试将目录(带有子目录和文件)移动到另一个目录。有些mv
文件夹不会合并,因为文件存在相同的目录。这不好,因为即使文件在源目录中较新,它们也会在移动时被删除。
我需要一个命令来:
- 移动目标目录中不存在的目录;
- 合并目标目录中已存在的目录;
- 重命名任何重复的文件(例如:
file.txt
已经存在,将源文件重命名为file(1).txt
)
我还没有找到任何可以处理所有这些的东西。
编辑
我尝试过使用以下命令:
mv -u [source] [destination]
它只移动目标中不存在的目录,并且我相信会丢弃任何与内容重复的目录。因此,源目录中的所有较新文件在移动时都会丢失。相反,这些目录应该合并并重命名任何重复的文件。希望我已经解释得足够好了。
PS 如果用终端命令编写,效果最好,我没有创建脚本的经验。
谢谢你的帮助!
答案1
文件可能不会到达您想象的位置。我建议使用 的-t
或-T
选项mv
。
答案2
这是我最终用来完成我需要的东西。它并不完美,但由于移动了很多目录,这已经完成了 99% 的移动/合并。
首先,我使用“mv”将所有目录移动到那里不存在的新目的地。每个目标文件夹都标记如下:“a、b、c...”。我希望每个以“A”开头的源目录移动到其各自的目标目录(“a”)。
mv -u /[source directory]/A* /[destination directory]/a && mv -u /[source directory]/B* /[destination directory]/b && so on and so on...
这不会移动所有目录,因为其中 % 的目录已存在于目标中。接下来,我运行rsync
与上面的命令非常相似的命令:
rsync --progress --remove-source-files -arvu /[source directory]/A* /[destination directory]/a && rsync --progress --remove-source-files -arvu /[source directory]/B* /[destination directory]/b && and so on and so on...
我的目标目录是 AZ 和 0-9,所以我只是一遍又一遍地运行这些命令,更改字母和数字,并将这些命令与&&
.它完成了工作,但我相信您可以想象这是一个冗长的命令。
为了完成它,我运行了以下命令:
find . -type d -empty -print -delete
这处理了 rsync 留下的空目录。这一切都可以通过 rsync 来完成吗?我不知道。我是一名菜鸟,在这里学习新东西。
就像我说的,并不完美,但它对我有用,我希望这对其他人有帮助。