2009-11-10 111 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