7

選択したカタログ内の、あるサイズよりも大きい各ファイルを書き留めるスクリプトを作成する必要があります。また、サイズ、名前、最終変更日で並べ替える必要があります。

だから私は最初の2つのケースを作りました:

サイズで並べ替え

RESULTS=`find $CATALOG -size +$SIZE | sort -n -r | sed 's_.*/__'`

名前順

RESULTS=`find $CATALOG -size +$SIZE | sed 's_.*/__' | sort -n `

しかし、最終変更日で結果を並べ替える方法がわかりません。

どんな助けでもいただければ幸いです。

4

2 に答える 2

11

ファイルが多すぎない場合の最善の方法の 1 つは、 を使用lsして並べ替え自体を行うことです。

名前でソートし、1 行に 1 つのファイルを出力します。

find $CATALOG -size +$SIZE -exec ls -1 {} +

サイズで並べ替え、1 行に 1 ファイルを出力します。

find $CATALOG -size +$SIZE -exec ls -S1 {} +

変更時刻でソートし、1 行に 1 ファイルを出力します。

find $CATALOG -size +$SIZE -exec ls -t1 {} +

スイッチで遊ぶこともできlsます: 人間が読めるサイズの長いリスト形式で、変更時間 (小さい方が先) で並べ替えます。

find $CATALOG -size +$SIZE -exec ls -hlrt {} +

ああ、ファイルだけにしたいかもしれませんfind(ディレクトリは無視してください):

find $CATALOG -size +$SIZE -type f -exec ls -hlrt {} +

最後に、いくつかの注意事項: bash で大文字の変数名を使用しないようにし (悪い習慣と見なされます)、バック ティックを使用しないようにして$(...)ください。例えば、

results=$(find "$catalog" -size +$size -type f -exec ls -1rt {} +)

また、前の行のようにすべての結果を文字列に入れたいとは思わないでしょう。おそらく、結果を配列に入れたいと思うでしょう。その場合、次のmapfileように使用します。

mapfile -t results < <(find "$catalog" -size +$size -type f -exec ls -1rt {} +)
于 2012-12-15T11:28:53.640 に答える
1

試してみてくださいxargs(STDINを引数のリストとして扱い、何でもしてください)、-tおよび-rフラグをls. つまり、次のようなものです。

find $CATALOG -size +$SIZE | xargs ls -ltr

これにより、最終更新日でソートされたファイルが得られます。

ただし、複数の属性で一度にソートするのは、シェル ユーティリティとパイプを使用して行うには非常に厄介です。シェル fu が強力でない限り、スクリプト言語 (ruby、perl、php など) を使用する必要があると思います。

于 2012-12-15T11:28:38.590 に答える