Sou relativamente novo no Bash e estou tentando fazer algo que na superfície parecia bastante simples - execute a busca por uma hierarquia de diretórios para obter todos os arquivos * .wma, canalize essa saída para um comando em que os converto para mp3 e salve o arquivo convertido como .mp3. Meu pensamento era que o comando deveria ter a seguinte aparência (deixei de fora o comando de conversão de áudio e, em vez disso, estou usando echo para ilustração):
$ find ./ -name '*.wma' -type f -print0 | xargs -0 -I f echo ${f%.*}.mp3
Pelo que entendi, o argumento -print0 permitirá que eu lide com nomes de arquivos com espaços (o que muitos deles fazem como arquivos de música). Estou esperando (como resultado do xargs) que cada caminho de arquivo encontrado seja capturado em f, e que usando a substring corresponda / exclua do final da string, que eu deva ecoar o caminho original do arquivo com um mp3 extensão em vez de wma. No entanto, em vez deste resultado, estou vendo o seguinte:
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
...
Portanto, minha pergunta (além do específico 'o que estou fazendo de errado aqui') é: valores que resultam de uma operação de pipe precisam ser tratados de maneira diferente nas operações de manipulação de strings do que aqueles resultantes de uma atribuição de variável ?
{}
membro)
xargs
é mais adequado do que exec
. Consulte este stackpost stackoverflow.com/questions/896808/find-exec-cmd-vs-xargs para um caso em questão.
xargs
comfind
. Ele vem com uma-exec
opção. Você pode simplesmente adicionar o comando que você usará à sua pergunta e alguém pode mostrar ofind
comando correto ?