特定のディレクトリで最大20個のファイルを一覧表示

特定のディレクトリで最大20個のファイルを一覧表示

特定のディレクトリで最大20個のファイルを表示しようとしています。すべてのサブディレクトリを含めたいのですが、実際のディレクトリ自体は含めたくありません。 (私はファイルだけを望んでいます。)私はこれを行う方法を見つけようとしましたが、オンラインで見つけたソリューションのどれも私が使用しているUnixバージョンでは動作しません。

これまで私はこれを持っています:

find /dir -type f -exec ls -al {} \; | sort -nr | head -n 20 du -a -g /dir/ | sort -n -r | head -n 20

Riotは以下のリストを提供しました。

file1.txt
file1.txt
file1.txt
file2.txt

など。 2番目のコマンドは次のようになります。

500    \path\
250    \path\to\
100    \path\to\directory\

など。私が探している結果は次のとおりです。

500    \path\file1.txt
250    \path\to\file2.txt
100    \path\to\directory\file3.txt

など。問題に対して次の回避策を試しました。

また、このチュートリアルに従ってください。

答え1

find dir/ -type f -exec du -a {} + | sort -nr | head -n 20

答え2

zshシェルのワイルドカードパターン

/dir/**/*(.DOL[1,20])

ディレクトリ内または下の最大20個のファイルに展開されるパス名/dir(隠された名前も考慮され、シンボリックリンクファイルは無視されます)。

glob修飾子のさまざまな部分は、次のことを(.DOL[1,20])意味します。

  • .:一般ファイルのみが考慮されます。
  • Ddotglob:隠された名前のファイルも考慮してください(例:inの効果bash)。
  • OL:結果をファイルサイズで降順に並べ替えます(O=降順、o=昇順ではありません。L=「長さ」)。
  • [1,20]:globで展開された20番目の要素を返します。

この**パターンは「再帰的に」一致するため、それ自体はディレクトリ内または下のすべての名前/dir/**/*と一致します。/dir

以下と組み合わせて使用​​してくださいls

ls -l -f /dir/**/*(.DOL[1,20])

表示されたリストがソートされないようにするには、-fwithを使用する必要があります。ls

またはduファイルを呼び出します。

du /dir/**/*(.DOL[1,20])

関連情報