如何使用符号链接和文件名列表复制目标文件

如何使用符号链接和文件名列表复制目标文件

我想复制很多文件。我将它们的位置作为一组符号链接,其名称作为行存储在 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

使用 GNUxargsreadlink

</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 计算机上构建它有关)。

相关内容