2つのパターンが与えられたら、特定のディレクトリを検索し、各パターンに一致する最後の3つのファイル名を印刷します。

2つのパターンが与えられたら、特定のディレクトリを検索し、各パターンに一致する最後の3つのファイル名を印刷します。

このコマンドをどのように短縮できますか?目的は、ファイル名が一致するABCフォルダに最新の3つのファイルを表示してから、ファイル名が一致してuvw同じ操作を実行することです。xyz

今後検索する文字列を追加する必要があるので、この長さを短くしたいと思います。

find . -name 'ABC' | xargs ls | grep -i uvw |sort| tail -n 3; find . -name 'ABC' | xargs ls | grep -i xyz |sort| tail -n 3

出力例:

2018-06-23T01-23-56.919Z-UVW.gz
2018-06-23T01-29-56.556Z-UVW.gz
2018-06-23T23-26-14.463Z-UVW.gz
2018-08-08T00-16-22.923Z-xyz.js
2018-08-08T00-16-24.517Z-xyz.js
2018-08-08T00-16-25.427Z-xyz.js

ベストアンサー1

そしてzsh

set -o extendedglob # best in ~/.zshrc
for w (uvw xyz) printf '%s\n' **/ABC/(#i)*$w*(D[-3,-1]:t)
  • **/: すべてのレベルのサブディレクトリ
  • (#i):大文字と小文字を区別せずに次のように一致します。
  • (D[-3,-1]:t): グローバル予選
  • D: 隠しファイルを含め、find次の隠しディレクトリを表示します。
  • [-3,-1]:最後の3つだけを選択します(グローブはデフォルトで語彙順にソートされます)。
  • :t:修飾子抽出済みあなたと同じファイルパス(デフォルト名ls

ABC ディレクトリが複数ある場合、そのディレクトリの名前がソートに影響します。のファイルがa/ABCのファイルの前に表示されますb/ABC

おすすめ記事