2013-05-16 23 views
1

一位同事向我展示了一種使用rm和xargs刪除.txt中列出的文件名的好方法 - 但我不記得他做了什麼。如何用xargs -a正確地形成rm?

我跑

echo | xargs -a file.txt 

file.txt的地方包含

1 
2 
3 
4 

而且它印

1 2 3 4 

我的邏輯說,

rm | xargs -a file.txt 

應刪除我創建的標題爲1和2以及3和4的文件。

但這不是我得到的行爲。

如何組成這個簡單的命令?

+5

第一個作品是因爲如果你不提供'xargs'命令,它默認爲'echo'。管道之前的「回聲」無關緊要。 – Barmar

回答

2

除非file.txt的是真正的大,xargs的是不必要的,這相當於:

rm $(<file.txt) 

和便攜式(POSIX)了。

+1

+1我喜歡你的答案,不需要xargs。請注意,如果文件名包含空格,則此解決方案將不起作用。另一方面,'xargs -I'{}'rm'{}' Lynch

3

試試這個命令: xargs rm < file.txt

xargs的採取一切LINE IN輸入,並將它添加到您指定的命令。 所以如果file.txt的包含:

a 
b 

然後xargs的將執行rm a b

5

我相信你想:

xargs -a file.txt rm 

的最後一個參數xargs的應該是你希望它運行的命令在文件中的所有項目上。

Lynch提出的解決方案也是有效的,並且與此相當。

+0

+1,因爲您使用OP所要求的-a file.txt。我沒有在我的答案中包含這個表單。 – Lynch

+1

'-a'選項不是標準的,我認爲它是一個GNU擴展。 – Barmar

+0

@Barmar我認爲你是對的-a。它不是POSIX。 http://www.unix.com/man-page/POSIX/0/xargs/ – Lynch