2009-11-10 116 views
4

我有一个名为list.txt的文件名列表。通过终端复制文件列表

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

我应该怎么做呢?

谢谢!

+0

这是一个shell脚本问题 - 关于编程。 – 2009-11-11 01:18:25

回答

8

你可以这样做:

cp `cat list.txt` new-folder/ 

注意事项使用(将需要另一种解决方案,如果是这样的话),这个时候,你应该避免在文件名中有空格。

的反引号执行cat list.txt命令,并使用该命令的输出作为命令行到cp的一部分。在命令行替换之前,cat的输出中的换行符折叠为空格。

+0

请注意,这会使文件中的任何目录层次平滑 - 它们将全部位于单个目录中。 – 2009-11-11 00:01:43

+0

这是真的。问题中提到了“文件名列表”而不是“路径名列表”。 – 2009-11-11 00:08:03

+0

我同意 - 这不是问题,除非提问者没有考虑过这个问题。相反,我的答案可能不是提问者想要的 - 正是因为它确实保留了目录结构。在保留某些目录结构的同时,想要从名称中删除某些部分的路径还远远没有听过 - 这些答案都不涉及。 – 2009-11-11 01:17:48

2

使用循环

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

请注意,这将文件中的任何目录层次结构展平 - 它们将全部位于单个目录中。 – 2009-11-11 00:04:49

+0

是的,但oP并没有说他需要有相同的结构。他特别指出“复制.....到一个新文件夹”。 – ghostdog74 2009-11-11 00:57:13

2

如果你想保存的目录结构,使用其中一个(假设的GNU tar):

cpio -pvdm /destination <list.txt 

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

在这两种情况下,最终的结果是地/目的地以list.txt文件的名称为前缀。

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”,否则手动填写绝对路径。 :)

+0

原始海报不想将* file * list.txt移动到新文件夹中;相反,list.txt包含要移动的文件列表。 – 2009-12-14 21:08:20

+0

我的不好!大声笑我修好了 – user231609 2010-01-04 19:30:48