Compare duas listagens de arquivos para localizar arquivos idênticos, mas ignorar as extensões

1

Eu gostaria de encontrar arquivos com a extensão wav tendo o mesmo nome de arquivo, apenas diferentes em extensão (que é mp3) no mesmo diretório.

Já experimentei o seguinte comando estruturado:

$ 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.
    
por xralf 22.04.2017 / 11:22

1 resposta

2

Se você quiser diff da saída de alguns comandos, use substituição do processo <(...) em vez da substituição do comando $(...) . Caso contrário, parece que deveria funcionar.

diff $(foo) coloca a saída de foo na linha de comando de diff , enquanto diff deseja que o nome de um arquivo seja lido. diff <(foo) organiza a saída de foo disponível a partir de um fd e fornece diff um nome de caminho que corresponde ao fd já aberto ( /dev/fd/NN , pode ser específico do sistema).

Apesar de ler a pergunta novamente, talvez você queira fazer algo assim:

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

Isso diria se todos os arquivos .wav no diretório possuem um arquivo .mp3 correspondente. (Mas não mostraria nenhum arquivo .mp3 que não tenha um .wav correspondente, é claro).

    
por 22.04.2017 / 11:29