Bash

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

  • April 22, 2017

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

如果要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當然。)

引用自:https://unix.stackexchange.com/questions/360583