2014-01-20 33 views
0

我有一個需要在txt文件中刪除約10k條目的列表。txt文件中的xargs和換行符 - 「xargs -d'/ n'」失敗

我開始在這裏: Unix: How to delete files listed in a file

但跑進

rm: 721_0199_01.mov\r: No such file or directory 

看起來我需要它忽略/不通過 '/ R'

所以,我去這裏: xargs and find, rm complaining about \n (newline) in filename

看起來可能是這樣的:

xargs -d '/r' rm < my-big-list.txt 

但抱怨:

xargs: illegal option -- d 
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr] 
     [-L number] [-n number [-x]] [-P maxprocs] [-s size] 
     [utility [argument ...]] 

我找不到-d任何人網頁我看的xargs的,所以不知道在哪裏可以從這裏去....

我的方式,我想念嗎?

謝謝!

好 - 再次感謝大家,我也擺脫了/ R的,但我有一大堆的空白,在這些文件名,這使我:

How can I make xargs handle filenames that contain spaces?

-0將xargs更改爲NUL(``\ 0'')字符作爲分隔符, 而不是空格和換行符。預計將在find(1)中使用-print0函數在 音樂會中使用。

這給:

Linux: Redirecting output of a command to "find"

但是,這並不是真正幫助...

弧度貨車的Skype Testccc995141.vid

弧度貨車的Skype Testccc995142.vid

拉德麪包車Skype Testccc995143.aiff

拉德貨車的Skype Testccc995144.aiff

拉德貨車的Skype Testccc995145.qtc

拉德貨車的Skype Testccc998bf.mov

拉德貨車的Skype Testccc998bf1.vid

拉德貨車的Skype Testccc998bf2.vid

rad van vans Skype Testccc998bf3.aiff

rad vans Skype Testccc998bf4。AIFF

弧度貨車的Skype Testccc998bf5.qtc

是什麼,我想刪除一個很好的例子 - 我懷疑這份名單的目錄中的內容約60%......

是有一些技巧使用Find?

謝謝!

+0

您是否準備在Windows中的txt文件?在這種情況下,只需首先刪除CR,它就可以工作。 OUTFILE – JosefN

+0

我用文本編輯在OS X TR -d「\ r」 < infile > ...在純文本模式下只能使用LF所以它是有點怪異 – chaoswarriorx

+0

文本編輯。無論如何,運行tr -d'\ r' my-big-list2.txt並比較長度並沒有什麼壞處。如果新文件較小,則刪除CR,並使用此類列表xargs可以工作。我只擔心命令行限制。 – JosefN

回答

0

這只是一個猜測,但它看起來像你的原始文件在Windows操作系統下進行。

在Windows下,以表達新行,您使用\ r \ n而統一下*它通常是\ n只。這將解釋爲什麼xargs不會刪除這個字符。

我建議你運行整個程序文件:dos2unix,它應該解決您的問題。

0

你可以嘗試有點不同的方式:

remove.sh

#!/bin/bash 
while read line 
do 
    rm $line 
done 

remove.sh < my-big-list.txt 

xargs的方法可以達到的bash限制。 echo $ ARG_MAX應該比你的文件大。您可以通過出口ARG_MAX = NEW_VALUE

0

你應該用反斜槓和「n」的定義新行字符作爲分隔符增加它。

xargs -d '\n' rm < my-big-list.txt