Zera os arquivos em pastas que tenham espaço no nome do arquivo

0

Estou tentando zerar (truncar) todos os arquivos em uma pasta ou subárvore que correspondem a um curinga. Outro post recomendado usando o método find … -exec sobre for variable in wildcard , que recebeu altas críticas. Quando eu tentei o método find … -exec , no entanto, Não consegui que funcionasse para arquivos com espaços em seus nomes.

Dois métodos tentados:

for method (trabalhos):

for x in *.wav; do echo -n "" > "$x"; done

find method (precisa de ajuda):

find . -type f -iname \*.wav -exec > "{}" \;

que produz

find: invalid argument ';' to '-exec'

e cria um arquivo chamado {} de zero bytes.

Observe que a substituição de > "{}" por echo {} imprime a lista de arquivos na pasta, portanto, a sintaxe está próxima. Só precisa descobrir como mitigar o erro com nomes de arquivos espaçados.

    
por TheHairyOne 03.03.2015 / 22:32

2 respostas

1

O problema com o comando find é que ele espera que -exec processe um > , mas find … -exec manipula apenas comandos simples. Apenas o shell sabe interpretar > . (OK, pode haver um ou dois outros programas que podem fazê-lo, mas find não é um deles.)

Se você quiser algo parecido com o que você tem, use

find . -type f -iname "*.wav" -exec sh -c '> "$1"' - {} \;

em que você diz find para executar um shell, e você usa -c para dizer ao shell para executar um c ommand que consiste em > seguido do nome do arquivo. Eu recomendaria que você fizesse algo mais simples:

find . -type f -iname "*.wav" -exec cp /dev/null {} \;
    
por 04.03.2015 / 02:02
0

Você não precisa citar a construção {} em find -exec :

find . -type f -name '* *' -exec ls {} \;

Você não pode usar > em find -exec , apenas quer um comando e parâmetros. Crie um script para chamar de find -exec se você precisar dele.

    
por 03.03.2015 / 22:57

Tags