プロが教えるわが家の防犯対策術!

ディレクトリ内のファイルで、日付が最も古い&(且つ)サイズが小さいものを削除するシェルを作成しようと考えています。

当初の以下のような考えをしていましたが、うまくいかないので質問しました・・・

ls -lStr(カレントディレクトリで日付が古くサイズが小さい順のつもり・・・)

上記のコマンド実行にて、
合計 100
-rwxr-xr-x 1 root root 333 2月 22 2009 java.log

と表示されるのを利用し、上から2行目のファイル名を取得するためawkして『java.log』というファイル名をprintfで表示させ変数か何かに格納し、rmコマンドで削除という流れを考えていました。

よくよく考えると
・ls -lStr は本当に日付が古くサイズが小さいものでソートされているのか
・lsコマンドで表示した『2行目』という指定でファイル名の取得できるのか


がよくわからなくなってしまいました。

上記の考え方よりこっちのほうが良い!やアドバイスがあれば非常に嬉しいです。


よろしくお願いしますm(__)m

A 回答 (1件)

「最も古い&(且つ)サイズが小さいもの」は、ちょっと意味が不明です。

両方の条件が成り立つとはかぎりません。
「最古だけどファイルサイズが最小ではないもの」
「最古ではないけどファイルサイズは最小のもの」
の2つのファイルがある場合、どちらが削除対象ですか?

「最小ではなくても、とにかく最古」が対象なら、ls -tr
「最古ではなくても、とにかく最小」が対象なら、ls -Sr

になるでしょう。

あと、lsのソート順オプションが決まったとして、その一覧の先頭に来ているファイルを削除する方法についてですが、
ls に-l オプションを付ける必要はないでしょう。
-lオプションなしならファイル名だけが表示されますから、それがそのまま削除対象として使えます。

あとは、head コマンドを使って

ls -tr | head -1

で、lsの結果の先頭1行だけが表示されますから、

rm `ls -tr | head -1`

とすれば、そのファイルだけが削除されます。
(これは、最古の1ファイルを削除する例になります)
    • good
    • 1
この回答へのお礼

最初の条件はディレクトリ内にある更新が古い日付順(同日同時刻ファイル複数)
でソートし、さらに同日同時刻の古い複数ファイルの中でファイルサイズが小さいもの
でソートというイメージでした。
1.最古の日付でソート
2.1.の中で更にサイズでソート
のような感じです。

ちなみにlsの件はできました!ありがとうございました!

お礼日時:2011/04/20 09:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!