同じ最初の8文字を繰り返すファイルの再帰検索[閉じる]

同じ最初の8文字を繰り返すファイルの再帰検索[閉じる]

たとえば、20200403のような日付で始まる多くのファイルを含むフォルダがあります。同じ日付の複数のファイルを含むフォルダを探したいです。つまり、最初の8文字が同じです。日付は各特定のフォルダ内でのみ重要です。フォルダ間では重要ではありません。

ファイルメタデータがファイル名の日付と必ずしも一致する必要はないため、それを見つける方法としては使用できません。

ベストアンサー1

適切にソートされたファイル名のリストを渡すことを検討してくださいuniq -duniqたとえば、シェルが照合順序に対して同じアイデアを持っているとします。

printf -- "%s\n" * | cut -c1-8 | uniq -d

結果が空でない場合は、重複項目が必要です。find次のコマンドで包みます。

find . -type d -exec sh -c '
  cd "$1" && test -n "$(printf -- "%s\n" * | cut -c1-8 | uniq -d)"
' find-sh {} \; -print

だから与えられた

$ tree .
.
├── subdir1
│   └── 20200403foo
├── subdir2
│   ├── 20200403bar
│   └── 20200403foo
├── subdir3
│   └── 20200403foo
├── subdir4
│   ├── 20200403bar
│   └── 20200403foo
└── subdir5
    └── 20200403foo

5 directories, 7 files

それから

$ find . -type d -exec sh -c 'cd "$1" && test -n "$(printf -- "%s\n" * | cut -c1-8 | uniq -d)"' find-sh {} \; -print
./subdir4
./subdir2

改行を含めて空の区切り文字をサポートするファイル名を処理する必要がある場合は、パイプを次のように変更できますcutuniq

printf "./%s\0" * | cut -zc1-10 | uniq -zd

おすすめ記事