find / xargs, nomes de arquivos com espaços e citações

0

Estou procurando uma maneira de obter find e xargs (GNUWin32, no Win7, ambos os programas na versão 4.1), com nomes de arquivos que contêm espaços.

Colocando os nomes de arquivos em xargs , como se fosse um desafio, mas parece que não há como consegui-los em uma única peça. Infelizmente, xargs retira as cotações, não importa o que eu tente.
Isso faz com que lame (que deve ser chamado de xargs ) se queixe de argumentos supérfluos, pois os nomes de arquivos contêm espaços.

Sim, estou ciente da opção find -exec (que funcionaria sem xargs ), estou explicitamente não interessado nisso, pois desejo executar 8 instâncias paralelas de lame para um tarefa em lote um tanto computacionalmente intensiva (recodifique aproximadamente 1.800 192kbit / s audiobook mp3s para que eles caibam no cartão micro-sd do meu player). Isto é, xargs -P 8 .

Este comando:

find . -name "*.mp3" -printf "\"%P\" --abr 52 -q 0 --silent \"conv/%P\" " | xargs -n 7

produzirá algo parecido com:

path/01.01 foo bar.mp3 --abr 52 -q 0 --silent conv/path/path/01.01 foo bar.mp3

... que ainda não tem aspas, então se eu colocar lame no final desse comando, ele considerará path/01.01 como entrada, foo como saída e reclamará que existe um% co_de supérfluo % argumento.

  • Eu tentei adicionar apóstrofos (em torno das aspas e dentro deles), mas "xargs" também os exclui.
  • bar.mp3 também não fará (pelo menos para qualquer coisa que eu tentei).
  • Eu tentei simular -print0 com -print0 e printf , sem sucesso.
  • Enquanto isso, estou jogando com a ideia de redirecionar a saída para um arquivo e adicionar as cotações com um editor de texto ...
por Damon 17.01.2015 / 18:18

2 respostas

1

Uso recomendado:

find ... -print0 | xargs -0 ...

... se você diz -print0 para encontrar, então você precisa de -0 para xargs.

Por que vale a pena, muitas vezes eu acho xargs um incômodo - nesses casos, eu tomo cuidado para construir os comandos exatos que eu quero executar com find -printf e, finalmente, acrescentar | bash a ele.

    
por 17.01.2015 / 18:24
0

Se um leitor futuro precisar de uma solução que funcione no CygWin com o GNU Parallel:

find . -name "*.mp3" | parallel lame {} --abr 52 -q 0 --silent conv/{}
    
por 10.07.2015 / 12:01

Tags