回答:
注:これはGNU-findで機能しますが、他のすべての検索では機能しません。
find . -maxdepth 1 -size +20M -printf "%T@ %f\n" |
sort -nr | head -n 20 | sed 's/[^ ]\+ //'
@Rajishのように起動しますが、printf
コマンドfrom find
を使用して出力形式を指定します。3時間関連のフォーマットがありますが、atimeが、ctimeをとのmtimeは - %T
ファイルのmtime用で、%A
かつ%C
他のフォーマットのためのものです。
@
エポックからの秒数でタイムフォーマットを指定することです。%f
は、ファイル名、\n
2つのファイル間の改行です。
次に、番号を逆順に並べ替えると、最も若いファイルが最初に表示され、で20行¹が取得されhead
ます。
最後に、sed
時間情報を破棄するために使用されます。
¹)head
行ごとに機能するため、名前に20を超える改行が含まれる単一のファイルは、少し珍しいですが禁止されていないため、最初の20の一致に属している場合、出力が破損する可能性があります。そのようなファイルがある場合は、それらを削除してください。名前を変更してください。多くの場合、単純なスクリプトでは問題になります。
printf
特定のGNUディストリビューションでのみ機能します。
Zshのglob修飾子はこれを簡単にします。.
修飾子のみを選択し、通常のファイル、Lm+20
20MB以上のプラス1バイト長である選択ファイル。正確に20MBのファイルを含めるには、を使用しますL+20971519
。次にom
、変更時間を減らしてソート[1,10]
し、最初の10個の一致に拡張を制限します。日付ごとにファイルを一覧表示-t
するls
かどうかのオプションが引き続き必要です。または、他のコマンドにファイルを渡すことができます(最も若いものから)。最初に最も古いファイルを使用Om
して別のコマンドにファイルを渡すには、を使用して変更時間を増やして並べ替え[-10,-1]
、最後の10個の一致を抽出します。
ls -ltr -- *(.Lm+20om[1,10])
echo *(.Lm+20Om[-10,-1])
私はこれが問題を解決するより良い方法かもしれないと思います...
find . -maxdepth 1 -type f -size +20M -exec ls -Shal {} \+ | head
findが読み取り権限のないファイルにアクセスしようとしたときにエラーを取り除くには、追加することをお勧めします
find . -maxdepth 1 -type f -size +20M -exec ls -Shal {} \+ 2> /dev/null | head
すべての答えをありがとう。私が行ったことは次のとおりです。
ls -halt | grep "M " |head
20メガバイトではなく1メガバイト(および1ギガバイト未満)を優先しますが、覚えやすく、人間が読めるファイルサイズの要素を保持します。
ls
、それは何よりも、あなたのファイルの表示を示しています。単純なファイル名の場合、ほとんどの場合、出力はファイル名と同じですが、それに頼るべきではありません。
file
の-ls
コマンドを使用する場合、特殊文字はバックスラッシュでエスケープされた文字として出力されますfind . -maxdepth 1 -size +20M -printf "%T@ " -ls | sort -nr | head -n 20 | sed 's/[^ ]\+ //'
。さらに、形式はのようになりls -l
、EoghanMも指定され-l
ます。