Compare dos listados de archivos para encontrar archivos idénticos pero ignore las extensiones

Compare dos listados de archivos para encontrar archivos idénticos pero ignore las extensiones

Me gustaría encontrar archivos con la extensión wav que tengan el mismo nombre de archivo, solo que tengan una extensión diferente (que es mp3) en el mismo directorio.

Probé el siguiente comando estructurado hasta ahora:

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

Respuesta1

Si desea diffla salida de algunos comandos, usesustitución de procesos<(...)en lugar de sustitución de comandos $(...). De lo contrario, parece que debería funcionar.

diff $(foo)coloca la salida de fooen la línea de comando de diff, mientras que diffquiere leer el nombre de un archivo. diff <(foo)organiza que la salida de fooesté disponible desde un fd y proporciona diffun nombre de ruta que corresponde al fd ya abierto ( /dev/fd/NNpuede ser específico del sistema).


Aunque vuelvas a leer la pregunta, tal vez quieras hacer algo como esto:

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

Eso indicaría si todos .wavlos archivos en el directorio tienen un .mp3archivo correspondiente. (Pero no mostraría ningún .mp3archivo que no tenga un correspondiente .wav, por supuesto).

información relacionada