2016-07-21 2 views
2

どのように私は次のコマンドを行うだろうか?これは私が持っている次の擬似コードです:unixでXファイルを削除するには

ls -U | head -4 < rm * 

私は

[email protected]:/tmp$ ls -U | head -4 
c9e5aff2-f4f6-459e-9752-466625165fa0.jpg 
815626f8-2650-4596-94b9-796a82780390.jpg 
b9259a6b-b421-4b64-ba4d-72fd632703a3.jpg 
78c243e7-43df-417d-9dcf-a4578f1c1f20.jpg 
+2

これは決してうまくいかないでしょう。 'rm'の出力を入力として' head'にリダイレクトします。 'ls | head -4 | xargs rm' xargsはstdinをとり、指定されたコマンドのコマンドライン引数に変換します。 –

+1

'ls -U'はディレクトリ順のファイルをリストします。これは本質的に任意です。それがあなたが使いたい基準であると確信していますか? –

+0

ファイル名のいずれかにスペースまたはその他の特殊文字が含まれていると、現在の応答が両方失敗することに注意してください。 –

答えて

3

xargs 4下記のファイルは、トリックを行う必要があります削除する:あなたはbashのを思い出すことができない場合は

$ ls -U | head -4 | xargs rm 
+0

これまで説明した両方のソリューションが機能しますが、これはxargsが先行コマンドの出力を次のコマンドの入力に流すため、優れたソリューションです。 –

+1

@AmirAfghani Indeed。私の答えはコンピュータの性能に匹敵するものではなく、あなたの記憶が私のものと同じくらい悪い場合は時間を節約するものです。 forループを書くことは、StackOverflowを取得して_really_する方法を理解するよりも、しばしば高速です。 :P –

2

を構文簡単なforループはしばしば魅力のように動作します:

for file in `ls -U | head -4`; do rm $file; done 
関連する問題