日付でソートされた{size}より大きいファイルのリスト

日付でソートされた{size}より大きいファイルのリスト

「現在のディレクトリで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のように起動しますが、printffromコマンドを使用してfind出力形式を指定します。時間関連の形式は3つあります。時間、c時間そして時間- %Tmtimeの場合、他の形式%Aの場合%C

@エポック以降の時間を秒単位で指定する形式です。%fファイル名に使用され、\n2つのファイル間の改行文字として使用されます。

その後、番号を逆順に並べ替えて、最も若いファイルを最初に指定し、20行を使用しますhead

最後に、sed時間情報を破棄するために使用されます。

1)head1行ずつ作業するため、名前に改行文字が20個を超える単一のファイル(少し珍しいが禁止されていない)が最初の20個の一致に属すると、出力が破損する可能性があります。そのようなファイルがある場合は削除してみてください。名前を変更してください。単純なスクリプトの場合、問題になることが多いです。

答え3

ジッシュグローバル予選これを簡単にしてください。修飾子は、少なくとも20 MB + 1バイトの長さのファイルを選択し、.通常のファイルのみを選択します。正確に20MBの長さのファイルを含めるには。日付別にファイルを一覧表示する場合に選択する必要があります。それ以外の場合は、ファイルを他のコマンドに渡すことができます(最も若いものから)。ファイルを別のコマンドに最初に渡すには(最も古いコマンド)、修正時間を長くしてソートを使用して最後の一致10を抽出します。Lm+20L+20971519om[1,10]-tlsOm[-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

関連情報