「現在のディレクトリで20MBを超える最新のファイルトップ10リスト」の問題を解決したいと思います。
私はls
これを行うことができます:
ls -Shal |head
最大のファイルの上位10個を取得し、次の操作を行います。
ls -halt |head
最新のトップ10ファイルをインポートする
findを使用すると、次のようにできます。
find . -size +20M
現在のディレクトリ(および不要なサブディレクトリ)から20 MBを超えるすべてのファイルを一覧表示します。
最もよく使用できる特定のサイズ以上の最新のファイルのトップ10を一覧表示する方法はありますかls
?
答え1
「現在のディレクトリ」オプションfind
は次のとおりです-maxdepth 1
。
find . -maxdepth 1 -type f -size +20M -print0 | xargs -0 ls -Shal | head
または
find . -maxdepth 1 -type f -size +20M -print0 | xargs -0 ls -halt | head
答え2
注:これはGNU検索には適用されますが、他のすべての検索には適用されません。
find . -maxdepth 1 -size +20M -printf "%T@ %f\n" |
sort -nr | head -n 20 | sed 's/[^ ]\+ //'
@Rajishのように起動しますが、printf
fromコマンドを使用してfind
出力形式を指定します。時間関連の形式は3つあります。時間、c時間そして時間- %T
mtimeの場合、他の形式%A
の場合%C
。
@
エポック以降の時間を秒単位で指定する形式です。%f
ファイル名に使用され、\n
2つのファイル間の改行文字として使用されます。
その後、番号を逆順に並べ替えて、最も若いファイルを最初に指定し、20行を使用しますhead
。
最後に、sed
時間情報を破棄するために使用されます。
1)head
1行ずつ作業するため、名前に改行文字が20個を超える単一のファイル(少し珍しいが禁止されていない)が最初の20個の一致に属すると、出力が破損する可能性があります。そのようなファイルがある場合は削除してみてください。名前を変更してください。単純なスクリプトの場合、問題になることが多いです。
答え3
ジッシュグローバル予選これを簡単にしてください。修飾子は、少なくとも20 MB + 1バイトの長さのファイルを選択し、.
通常のファイルのみを選択します。正確に20MBの長さのファイルを含めるには。日付別にファイルを一覧表示する場合に選択する必要があります。それ以外の場合は、ファイルを他のコマンドに渡すことができます(最も若いものから)。ファイルを別のコマンドに最初に渡すには(最も古いコマンド)、修正時間を長くしてソートを使用して最後の一致10を抽出します。Lm+20
L+20971519
om
[1,10]
-t
ls
Om
[-10,-1]
ls -ltr -- *(.Lm+20om[1,10])
echo *(.Lm+20Om[-10,-1])
答え4
ファイル名に改行が含まれているかどうかに関係なく、指定された10個のファイルのみが印刷されます。ファイルシステムを使用するinodes
cd "$1"
for i in $(find . -maxdepth 1 -type f -size +20M -printf "%T@\t%i\n" \
| sort -nr | head | cut -f 2)
do
ls -l "$(find . -inum $i)"
done