ディレクトリに次のファイルがあります。
-rw-r--r-- 1 smsc sys 46 Apr 22 12:09 bills.50.1.3G.MO.X.20120422120453.Z
-rw-r--r-- 1 smsc sys 28 Apr 22 12:15 bills.50.1.3G.MO.X.20120422120953.Z
-rw-r--r-- 1 smsc sys 46 Apr 22 12:20 bills.50.1.3G.MO.X.20120422121453.Z
-rw-r--r-- 1 smsc sys 46 Apr 22 12:25 bills.50.1.3G.MO.X.20120422121953.Z
5番目の列はファイルサイズです。サイズ46のファイルをすべて削除したいです。これらのファイルをフィルタリングするには、次のコマンドを使用しました。
ls -ltr | awk '$5 ~ /46/ {print $0}'
良い結果。しかし、今フィルタリングされたすべてのファイルを削除したいので、上記のコマンドに以下を追加します。
ls -ltr | awk '$5 ~ /46/ {print $0}' | xargs rm
ただし、次のエラーが発生します。
rm: invalid option -- w
find
overを使用しなければ、ls
次の形式で出力されるようです。
./bills.50.1.3G.MO.X.20120421050453.Z
./bills.50.1.3G.MO.X.20120421154953.Z
./bills.50.1.3G.MO.X.20120419133452.Z
ただし、そのパラメータでファイルをフィルタリングすることはできません。これをどのように実行できますか?
ベストアンサー1
2つのエラーがあります。
比較している寸法は含む
46
;あなたはそうしたいです。同じ46.ファイル名だけが必要な場合は、行全体を印刷します。
そしてボーナスの質問:ソート順序を使用しないときに出力を-ltr
ソートすることのポイントは何ですか?ls
あなたは次のことをしたいです。
ls -l | awk '$5 == "46" {print $9}' | xargs rm
あなたを除くいいえ今は安全ですが、ls
出力解析は信頼できないので、これをやりたいと思います。適切なツールを使用してください。
find . -maxdepth 1 -size 46c -delete # requires GNU find
(これを行うと、POSIXはブロックでfind
はなく単位で動作しないため、面倒です。ファイルをインポートせずに適切なディレクトリスキャンを使用できるPerl / Python / Ruby /などのスクリプトを書くことをお勧めします。問題があります。名前に特殊文字を含む)-maxdepth
-size