tcshでfindコマンドを使用して各フォルダで最初に一致する結果を返すにはどうすればよいですか?

tcshでfindコマンドを使用して各フォルダで最初に一致する結果を返すにはどうすればよいですか?

複数の大きなフォルダにあるすべてのファイルを検索したいのですが、.mb検索基準に一致するファイルが多い場合は、各フォルダから1つのファイルのみを返したいと思います。

フォルダ構造

..
--abc
    |_scenes
    |    |__  file1.mb
    |    |__  file2.mb
    |...
--def
    |_scenes
    |    |__  file3.mb
    |    |__  file4.mb
    |...

もし私がするなら

find /net/*/scenes -maxdepth 1 -type f -size +200M

それはすべてを返します

file1.mb
file2.mb
file3.mb
file4.mb

file1.mb合計のみを返すにはどうすればよいですかfile3.mb

ベストアンサー1

find+awk解決策:

find /net/*/scenes -maxdepth 1 -type f -name "*.mb" \
| awk -F'/' '{ fn = $NF; $NF = "" }!a[$0]++{ print $0 fn }' OFS='/'
  • -F'/'およびOFS='/'- 入力および出力フィールドの区切り記号を表します。
  • fn = $NF- 最後のフィールド値(ファイル名など)を変数に保存します。fn
  • !a[$0]++{ print $0 fn }- 一意のディレクトリパスが最初に表示されたときにこの行$0(フルファイルパス)を印刷します(次のように表示されます)。

またはGNUcoreutilsパイプを使用してください。

find /net/*/scenes -maxdepth 1 -type f -name "*.mb" -printf "%H %p\n" \
| sort -k1,1 -u | cut -d' ' -f2

おすすめ記事