比較兩個文件列表以查找相同的文件但忽略擴展名

比較兩個文件列表以查找相同的文件但忽略擴展名

我想在同一目錄中找到具有相同文件名的 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

相關內容