複数の大きなフォルダにあるすべてのファイルを検索したいのですが、.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