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 将复制您找到的文件路径,并在其前面加上目标目录。
我想递归复制目录并复制 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 将复制您找到的文件路径,并在其前面加上目标目录。