xargsは行のスペースを処理できません。

xargsは行のスペースを処理できません。

すべてのターゲットファイルが削除されました。もちろん、削除を再実行しようとすると、ファイルは削除されません。時間を無駄にしてすみません。


私はcygwinでbashを使っています。

私の出力はfdupesファイルにあります。そのままにして、リストされている残りのファイルを削除したいディレクトリを除外するために出力をgrepingしています。

スペースがある項目があります。

./NewVolume/keep/2009/conference/conference/conference 004.jpg

任意の旅行xargs

$ cat real-dupes.txt |xargs rm {}
...
rm: cannot remove ‘2009/conference/conference/conference’: No such file or directory`

切り替えようとすると、-0次の行が一緒にグループ化されているように見えます。

$ cat real-dupes.txt |xargs -0 rm
xargs: argument line too long

他の質問には回答があり、質問者はfind回答を使用して議論を入力することをお勧めしますxargsfind削除する重複項目を識別するために簡単に使用できないと信じているため、これは私のシナリオには役立ちません。また、fdupesジョブは約12時間以上実行されたので、このデータセットを必ず使用したかったです。

私が知っている限り、fdupes自動削除からディレクトリを除外する方法がないので、すぐにそれを行うことはできません。

答え1

xargs -0nullで終わる文字列が必要なので、うまくいきませんが、見つからないので、すべての入力を読み取り、その引数にワイルドカードを使用します。

\0次のように各新しい行を変換します(各行にファイル名を付けたい)。

cat real-dupes.txt | tr '\n' '\0' | xargs -0 rm {}

答え2

デフォルトでは空白にxargs分割されます。あなたは使用することができます非標準 -0 オプション文字に分割されますが、\000入力は期待どおりに準備する必要があります。 (find ... -print0これはこれを行う1つの方法です。バージョンに対応するfindオプションがあるとします-print0。)

ファイル名に新しい行が含まれていない場合(たとえば、1行に1つのファイル)、xargs次のように使用できます。

xargs -I{} rm {} <real-dupes.txt

マニュアルページには、xargsフラグの次の説明があります-I

-I replace-strreplace-str初期引数の発生を標準入力から読み取った名前に置き換えます。また、引用符のないスペースは項目を終了せず、代わりに区切り文字は改行文字です。意味-xします-L 1

関連情報