比较两个文件列表以查找相同的文件但忽略扩展名

比较两个文件列表以查找相同的文件但忽略扩展名

我想在同一目录中找到具有相同文件名的 wav 扩展名的文件,仅扩展名不同(mp3)。

到目前为止,我尝试了以下结构化命令:

$ 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想要读取文件的名称。diff <(foo)安排 的输出可foo从 fd 获得,并给出diff与已打开的 fd 相对应的路径名(/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

相关内容