复制/移动目标文件夹已存在的文件夹

复制/移动目标文件夹已存在的文件夹

我正在编写一个 bash 脚本来将名为“folder”的文件夹复制/移动到已包含“folder”的目录,并且我希望合并内容。

我正在尝试使用这个问题的解决方案:

用 mv 合并文件夹?

cp -rl source/folder destination
rm -r source/folder

如果我在终端中输入第一行,源“文件夹”和目标“文件夹”将按预期合并。

但是,当我运行其中包含该行的脚本时,目标现在包含两个文件夹,而不是合并文件夹; “文件夹”和“空白”,其中“空白”包含源“文件夹”的内容。

答案1

将 SOURCE 附加到 DESTINATION 成为 SOUCE+DESTINATION 更复杂(对于自己),请查找

 man append 

您可以尝试:

    cp  --recursive  --preserve --update  SOURCE DESTINATION     

使用“--preserve”保留指定的属性(默认:模式、所有权、时间戳),如果可能的话附加属性:上下文、链接、xattr、全部

使用“--recursive”递归复制目录

当源文件比目标文件新或目标文件丢失时,使用“--update”进行复制。

如需终端帮助:

   cp --help   

或者

  man cp  

当终端工作时,在 bash 脚本中尝试一下

答案2

我认为更好的方法是使用更好的工具。

rsync -avhP --remove-source-files "source/folder" destination

-a用于归档(保持用户/组、模式等完好无损)

-v只是为了冗长,这样你就可以观察它在做什么

-h因为我喜欢人类可读的信息

-P所以 rsync 将接收部分传输,以防万一

--remove-source-files将删除 rsync 传输的所有内容

我发现我经常不得不将空文件夹删除作为内务处理:

find source/folder -type d -exec rmdir {} \;

我将其添加到前面zshrepeat 10它会清除 10 层深的空文件夹。 :-)

相关内容