我希望以递归方式复制目录并复制链接的目标,但如果链接的目标不存在,我不希望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默默跳过这些并继续?
答案 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将复制找到的文件路径,并在其前面加上目标目录。