Vergleichen Sie zwei Dateilisten, um identische Dateien zu finden, aber ignorieren Sie Erweiterungen

Vergleichen Sie zwei Dateilisten, um identische Dateien zu finden, aber ignorieren Sie Erweiterungen

Ich möchte Dateien mit der Erweiterung „WAV“ finden, die denselben Dateinamen haben, sich aber in der Erweiterung (MP3) unterscheiden und sich im selben Verzeichnis befinden.

Ich habe bisher den folgenden strukturierten Befehl ausprobiert:

$ 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.

Antwort1

diffWenn Sie die Ausgabe einiger Befehle wünschen , verwenden SieProzesssubstitution<(...)anstelle von Befehlsersetzung $(...). Ansonsten scheint es zu funktionieren.

diff $(foo)legt die Ausgabe von fooin die Befehlszeile von ab diff, während diffder Name einer zu lesenden Datei gewünscht wird. diff <(foo)sorgt dafür, dass die Ausgabe von foovon einem FD aus verfügbar ist, und gibt diffeinen Pfadnamen an, der dem bereits geöffneten FD entspricht ( /dev/fd/NN, kann systemabhängig sein).


Wenn Sie die Frage jedoch noch einmal lesen, möchten Sie vielleicht einfach so etwas tun:

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

Dadurch wird angezeigt, ob alle .wavDateien im Verzeichnis eine entsprechende Datei haben . (Es werden aber natürlich .mp3keine .mp3Dateien angezeigt, die keine entsprechende Datei haben .).wav

verwandte Informationen