通过终端复制文件列表

5

我有一个名为list.txt的文件名列表。

我想将此列表中的文件复制到一个新文件夹中。

我该如何操作?

谢谢!


这是一个关于编程的Shell脚本问题。 - Jonathan Leffler
4个回答

9
你可以这样做:
cp `cat list.txt` new-folder/

请注意,使用此方法时应避免文件名中有空格(如果出现这种情况,则需要另一种解决方案)。
反引号执行“cat list.txt”命令,并将该命令的输出作为“cp”的命令行的一部分。在命令行替换之前,cat的输出中的换行符会被折叠成空格。

请注意,这会将文件中的任何目录层次结构展平 - 它们都将位于单个目录中。 - Jonathan Leffler
没错。问题中提到的是“文件名列表”,而不是“路径名列表”。 - Greg Hewgill
我同意 - 这不是问题,除非问问题的人没有考虑这个问题。相反,我的答案可能不是问问题者想要的 - 正是因为它保留了目录结构。希望在保留一些目录结构的同时修剪掉路径名称的某些部分并不罕见 - 但是没有一个答案涉及到这点。 - Jonathan Leffler

3

如果您想保留目录结构,请使用以下命令之一(假设使用GNU tar):

cpio -pvdm /destination <list.txt

tar -cf - -F list.txt | tar -C /destination -x

在这两种情况下,/destination会被添加到list.txt文件中的文件名前面。

2

使用循环

while read -r line
do
  cp "$line" /destination
done <"file"

请注意,这会将文件中的任何目录层次结构展平 - 它们都将位于单个目录中。 - Jonathan Leffler
是的,但oP并没有说他需要具有相同的结构。他特别指出“将......复制到一个新文件夹中”。 - ghostdog74

1

循环:

dest="<destination folder>" #keep the quotes
for i in `cat < list.txt` #loop each line of list.txt
do
cp $i $dest #in each loop copy $i, e/a line of list.txt to $dest
echo "Done."
done

测试完成。请确保"./list.txt"存在,否则请手动填写绝对路径。 :)

原帖作者不想将 file list.txt 移动到新文件夹中;相反,list.txt 包含要移动的文件列表。 - Ian Clelland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接