我想复制很多文件。我将它们的位置作为一组符号链接,其名称作为行存储在 txt 文件中。所以我使用 cp 并需要结合 readlink 和 cat/pipe 功能。我还没有看到其他问题涉及这种组合。
命令:
cp $(readlink < /path/list.txt) -t /path/targetdir
一个更简单的示例适用于在 readlink 的参数中显式使用符号链接名称的情况(但我有太多文件名无法手动执行此操作),例如:
cp $(readlink symlink1 symlink2) -t /path/targetdir
问题在于我如何组合“readlink”和管道,但我不知道是什么。
编辑:这是 list.txt 文件第一行内容的示例:
symlink_13243
symlink_39184
symlink_83204
每行都是一个唯一的符号链接名称。
答案1
使用 GNUxargs
和readlink
:
</path/list.txt xargs -d'\n' readlink -z | xargs -0 cp -t /path/targetdir
中的每行有一个符号链接list.txt
,选择换行符 ( \n
) 作为第一个符号链接的分隔符xargs
,并将输出通过管道readlink
传送到另一个符号链接xargs
,这次使用空字符来终止路径 (-z
和-0
)。
答案2
它通过使用循环而cp -L
不是 来工作readlink
。我在包含符号链接的文件夹中运行了以下命令:
for item in $(cat /path/dir/list.txt); do cp -L $item /path/targetdir; done
我还遇到了 txt 文件的编码问题(与在 R 中但在 Windows 计算机上构建它有关)。