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

linux cp: how to have it follow links but not stop if a link target doesn't exist

我想递归复制目录并复制 link 的目标,但我不希望 cp 在 link 的目标不存在时停止。

例如,我运行这个命令:

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

但第一次遇到目标不存在的 symlink 时,它会退出:

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

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

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

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

当然,你也可以只写一个python等程序帮你复制,或者在原始树中找到所有没有被破坏的符号链接的文件,并使用它们与cp,替换部分使用 sed:

与目标路径的路径
find -type d|sed 's/^\(.*\)/"" "\/target\/"/g'|xargs -p mkdir
find -follow -not -type l -not -type d|sed 's/^\(.*\)/"" "\/target\/"/g'|xargs -n2 cp

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