「現在のディレクトリで20MBを超える最新のファイルをトップ10にリストする」という問題を解決したいと思います。
ls
を使用すると、次のことができます。
ls -Shal |head
トップ10の最大ファイルを取得し、
ls -halt |head
最新のトップ10ファイルを取得する
Findでできること:
find . -size +20M
現在のディレクトリ(およびサブディレクトリ)にある20MBを超えるすべてのファイルを一覧表示する場合。
できればls
を使用して、特定のサイズを超える最新の上位10ファイルを一覧表示する方法はありますか?
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
注:これはGNU-findで機能しますが、他のすべての機能ではありません。
find . -maxdepth 1 -size +20M -printf "%T@ %f\n" |
sort -nr | head -n 20 | sed 's/[^ ]\+ //'
@Rajishに似ていますが、printf
からfind
コマンドを使用して出力形式を指定します。時間に関連する3つの形式がありますatime、ctimeおよびmtime-%T
はmtime、%A
および%C
は他のフォーマット用です。
@
は、エポック以降の時間形式を秒単位で指定します。 %f
はファイル名、\n
2つのファイル間の改行。
次に、番号で逆順に並べ替えると、最も新しいファイルが最初に表示され、head
を使用して20行20が取得されます。
最後に、sed
を使用して、時間情報を破棄します。
¹)head
は1行ずつ機能するため、名前に20を超える改行が含まれる単一のファイルは少し珍しいですが、禁止されていません。そのようなファイルがある場合は、それらを削除してみてください-まあ、それらの名前を変更してください。単純なスクリプトの場合、問題になることがよくあります。
Zshの glob qualifiers はこれを簡単にします。 .
修飾子は通常のファイルのみを選択し、Lm+20
は少なくとも20MBに1バイト長のファイルを選択します。ちょうど20MBの長さのファイルを含めるには、L+20971519
を使用します。次に、om
は変更時間を減らして並べ替え、[1,10]
は最初の10個の一致に展開を制限します。日付順にファイルを一覧表示する場合は、ls
に-t
オプションが必要です。または、他のコマンドにファイルを渡すことができます(最年少が最初)。最も古いファイルを最初に使用してファイルを別のコマンドに渡すには、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
これは、ファイル名に埋め込まれた改行文字に関係なく、指定された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
すべての回答をありがとう。私が行ったことは次のとおりです:
ls -halt | grep "M " |head
20メガバイトを無視して1メガバイト以上(ギガバイト未満)を優先しますが、人間が読めるファイルサイズの要素を簡単に覚えて保存することができます。