
Я хотел бы найти файлы с расширением 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