2017-04-27 10 views
2

ホームディレクトリに '〜'で始まるファイルを見つけ出し、数値でソートし、最初の5つを出力し、Linuxでfindコマンドとパイプを使ってそれらを削除します。私はbashスクリプトを持っている:linuxのfindコマンドでパイプを使う

#!/bin/bash 
find ~/ -name "~*" | sort -n | head -5 | tee | xargs rm 

これは、ファイルを削除するため正常に動作しますが、私は標準出力に削除されたファイルを印刷するにはteeコマンドを期待していました。このコマンドはすべてファイルを削除するだけですが、端末にそのように出力されます。私は何を追加/変更する必要がありますか? ありがとうございます。

+0

'tee'コマンドの目的は何ですか? – hek2mgl

+0

パイプがstdoutを消費するのは分かりますか? –

+0

パイプは最初のコマンドのstdoutを2番目のstdinに接続することを理解していますが、私は講義で得たヒントだったので、何とか 'tee'コマンドでそれを防ぐことができると思いました... – Luki

答えて

3

あなただけのRMに冗長フラグを使用することができ、それがドキュメント

-vを見るために使用man rmそれは

find ~/ -name "~*" | sort -n | head -5 | xargs rm -v 

を削除何を教えてくれる、

を--verbose何が行われているかを説明してください

+0

私はこれを使用しましたそれは短く、私が想像した通りです:)ありがとう。 – Luki

+0

いいえ問題は、私が助けることができるうれしいです:)。 – Danny

+0

はい、短いですが、ファイル名に空白やグロブ文字が含まれないことを100%確信している場合にのみ使用してください。 – anubhava

3

あなた各削除ファイル名を印刷するrm -vを使用することができます。

find ~ -name '~*' -print0 | sort -zn | head -z -n 5 | xargs -0 rm -v 

はまた、空白やグロブ文字を含むファイル名に対処するために使用-print0sort. head, xargsで対応するすべてのオプションに注意してください。

+0

'head'が' -z'フラグをサポートしていることを知りませんでした – hek2mgl

+0

gnu 'head'だけが' -z'をサポートしていると思います – anubhava

関連する問題