我有一个包含许多文件的目录,服务器上大约有 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
来复制/移动文件。