2011-09-23 68 views
0

我有一個文本文件,其中包含我想要移動的文件位置列表,首先到臨時目錄,在源目錄中執行一些操作,然後將文件移回到原始位置。xargs是解決這個問題的方法嗎?

列表文件是由產生,比如格式,find命令,如:

~/$ find . -name "*.[ch]" > ~/tmp/my_file_list.txt 

目前我使用sed來操縱屏幕上的文件,剪切和粘貼其輸出發出命令。我覺得這是反感,但它的工作原理:

~/$ sed -r 's_.+_cp & ~/tmp/_' ~/tmp/my_file_list.txt 

(複製和粘貼輸出,然後把文件備份)

~/$ sed -r 's_.+/(.+)_cp ~/tmp/\1 &_' ~/tmp/my_file_list.txt 

(複製粘貼... ... WINCE)

我怎麼能做到上述兩行,而沒有複製和粘貼......我在想,xargs可能持有我渴望的解決方案。

[編輯] 爲了處理空間:

~/$ sed -r 's_.+_cp "&" ~/tmp/_' ~/tmp/my_file_list.txt 

~/$ sed -r 's_.+/(.+)_cp "~/tmp/\1" "&"_' ~/tmp/my_file_list.txt 
+1

文件名是否包含空格? –

+0

不,但你指出一個普遍的案例缺陷......將被編輯。 – Jamie

回答

3

只需管道輸出到bash

~/$ sed -r 's_.+_cp & ~/tmp/_' ~/tmp/my_file_list.txt | bash 
+0

我不知道你可以做到這一點。謝謝。 – Jamie

0

儘管我看到你已經得到了解決複製粘貼問題的答案,但我實際上建議使用rsync。該序列會去如下:

~/$ find . -name "*.[ch]" > ~/tmp/my_file_list.txt 

要備份:

~/$ rsync --files-from=tmp/my_file_list.txt . tmp/ 

什麼就做什麼用的原始文件,然後恢復:

~/$ rsync --files-from=tmp/my_file_list.txt tmp/ . 

這樣做的(忽略不計)優勢不復制您未修改的文件,從而節省一些磁盤活動。它具有不那麼可忽略的優點,即如果在不同目錄中具有相同名稱的多個文件,它們不會發生衝突,因爲rsync會保留相對路徑。

相關問題