Compare duas listagens de arquivos para encontrar arquivos idênticos, mas ignore as extensões

Compare duas listagens de arquivos para encontrar arquivos idênticos, mas ignore as extensões

Gostaria de encontrar arquivos com extensão wav com o mesmo nome de arquivo, apenas com extensão diferente (que é mp3) no mesmo diretório.

Eu tentei o seguinte comando estruturado até agora:

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

Responder1

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

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


Ao 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 .wavos arquivos no diretório possuem um .mp3arquivo correspondente. (Mas não mostraria nenhum .mp3arquivo que não tivesse um correspondente .wav, é claro.)

informação relacionada