2つのファイルリストを比較して、拡張子を無視して同一のファイルを検索します

2つのファイルリストを比較して、拡張子を無視して同一のファイルを検索します

同じディレクトリ内で、ファイル名は同じで拡張子 (mp3) のみが異なる、wav 拡張子のファイルを検索したいと思います。

これまでに、次の構造化コマンドを試しました。

$ diff -s $(for i in *.wav; do echo "${i%wav}"; done) $(for i in *.mp3; do echo "${i%mp3}"; done)
diff: extra operand `abc(xyz'
diff: Try `diff --help' for more information.

答え1

diffいくつかのコマンドの出力が必要な場合は、プロセス置換<(...)コマンド置換の代わりに$(...)。それ以外は動作するはずです。

diff $(foo)は の出力をfooのコマンドラインに置きますdiffが、 はdiff読み取るファイルの名前を必要とします。 はの出力がfd から利用できるようdiff <(foo)に準備し、すでに開かれている fd に対応するパス名を指定します ( 、システム固有の可能性があります)。foodiff/dev/fd/NN


質問をもう一度読んでみると、おそらく次のようなことをしたいだけでしょう。

for f in *.wav ; do
    b=${f%.wav}
    if [ -f "$b.mp3" ] ; then echo "$b.mp3 exists" ; else
        echo "$b.mp3 missing" ; fi
done

.wavこれにより、ディレクトリ内のすべてのファイルに対応するファイルがあるかどうかがわかります。 (ただし、当然ながら、対応するファイルがないファイルは.mp3表示されません。).mp3.wav

関連情報