用于移动、合并和重命名重复项的 Linux 命令

用于移动、合并和重命名重复项的 Linux 命令

我正在尝试将目录(带有子目录和文件)移动到另一个目录。有些mv文件夹不会合并,因为文件存在相同的目录。这不好,因为即使文件在源目录中较新,它们也会在移动时被删除。

我需要一个命令来:

  1. 移动目标目录中不存在的目录;
  2. 合并目标目录中已存在的目录;
  3. 重命名任何重复的文件(例如: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 来完成吗?我不知道。我是一名菜鸟,在这里学习新东西。

就像我说的,并不完美,但它对我有用,我希望这对其他人有帮助。

相关内容