たとえば、20200403のような日付で始まる多くのファイルを含むフォルダがあります。同じ日付の複数のファイルを含むフォルダを探したいです。つまり、最初の8文字が同じです。日付は各特定のフォルダ内でのみ重要です。フォルダ間では重要ではありません。
ファイルメタデータがファイル名の日付と必ずしも一致する必要はないため、それを見つける方法としては使用できません。
ベストアンサー1
適切にソートされたファイル名のリストを渡すことを検討してくださいuniq -d
。uniq
たとえば、シェルが照合順序に対して同じアイデアを持っているとします。
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
改行を含めて空の区切り文字をサポートするファイル名を処理する必要がある場合は、パイプを次のように変更できますcut
。uniq
printf "./%s\0" * | cut -zc1-10 | uniq -zd