ファイル名が若干異なる重複ファイルを探す

ファイル名が若干異なる重複ファイルを探す

bashスクリプトまたはコマンドを使用して角かっこ内でのみ異なりますが、非常に似た名前のファイルを見つけたいと思います。例えば

Filename (year1)
Filename (year2)

一致する必要があります。

または、より具体的に言えば、

Filename (2000)
Filename (2001)

一致する必要があります。

ベストアンサー1

次のスクリプトは、位置引数のリストをパターンに一致する名前のリスト*' ('*')'、つまり名前にスペースがあり、最後に括弧がある現在のディレクトリ内のすべてのファイルに設定することによって機能します。

スクリプトはダブルループを使用して、各名前を他のすべての名前と比較します。A名前を他の名前と比較してBからと比較するBことを避けるために、A外部反復が開始されたときにリストの最初の要素を移動します。これにより、A名前自体のテストも防止されます。

内部ループでは、名前の末尾の角かっこを削除し、2つの結果文字列を比較します。文字列が同じ場合は名前を印刷します。

#!/bin/sh

set -- *' ('*')'

for name do
        shift

        for dup do
                if [ "${name%% (*)}" = "${dup%% (*)}" ]; then
                        printf '"%s" <-> "%s"\n' "$name" "$dup"
                fi
        done
done

おすすめ記事