Linux(mv 或 cp)从文件文本列表中获取特定文件?

Linux(mv 或 cp)从文件文本列表中获取特定文件?

我有一个包含许多文件的目录,服务器上大约有 50,000 个 pdf 和其他文件。我需要将特定的文件移动到另一个目录。我可以以 csv 或任何其他文本格式生成需要移动的文件列表。

我需要做的是运行一个 bash 脚本并将文本文件中列出的文件移动或复制到另一个目录。

有没有简单的方法可以做到这一点?任何建议或资源都将不胜感激。

答案1

rsync 有几个选项可以获取要处理的文件列表(--files-from--include-from等)。

例如,这样就可以达到目的:

rsync -a /source/directory --files-from=/full/path/to/listfile /destination/directory

答案2

为了避免无用的使用cat(如果您不使用rsync):

xargs -a file_list.txt mv -t /path/to/dest

如果文件每行列出一个,这将处理任何有效的文件名,除非它包含换行符。

答案3

for file in `cat listoffiles`; do mv "$file" /path/of/destination ; done

假设 bash,并且listoffiles每行包含一个文件。我对 rsync 路由的唯一异议是 OP 要求移动文件的方法,而不是复制文件。rsync 的标志比皇室婚礼还多,所以我确信可以进一步修改它来做到这一点,但有时越简单越好!

答案4

这取决于您拥有的文本文件的格式。例如,如果您有这样写的文件列表:每个文件位于新行上。您可以像这样使用 xargs:

$ cat your_text_file | xargs cp -t /path/to/destination

另外,您可以使用find带选项的命令-exec来复制/移动文件。

相关内容