linux cp:如果链接目标不存在,如何让它跟随链接但不停止

时间:2015-01-09 23:29:51

标签: linux unix cp

我希望以递归方式复制目录并复制链接的目标,但如果链接的目标不存在,我不希望cp停止。

例如,我运行此命令:

cp -fprL /path/to/src_dir /path/to_dest_dir

但是当它第一次到达目标不存在的符号链接时会退出:

cp: cannot stat `/path/to/non-existent/file': No such file or directory

有没有办法让cp默默跳过这些并继续?

1 个答案:

答案 0 :(得分:2)

使用标准GNU工具链,不,没有办法。

您可以复制文件,将符号链接保留为符号链接,然后使用find -follow -type l -delete删除损坏的符号链接,然后再次复制,这次是符号链接。

当然,您也可以编写一个python等程序来为您复制,或者找到原始树中没有破坏符号链接的所有文件,并将这些文件与cp一起使用,用目标替换部分路径路径使用sed

find -type d|sed 's/^\(.*\)/"\1" "\/target\/\1"/g'|xargs -p mkdir
find -follow -not -type l -not -type d|sed 's/^\(.*\)/"\1" "\/target\/\1"/g'|xargs -n2 cp

sed将复制找到的文件路径,并在其前面加上目标目录。