Como leio cada arquivo e imprimo o nome do arquivo antes de lê-lo?

2

Eu tentei

$ find Music -exec cp -v {} \>/dev/null \;

Tem erro

'Music/AlbumArtSmall.jpg' -> '>/dev/null'
cp: cannot create regular file '>/dev/null': No such file or directory

Eu tentei

$ find Music -exec echo {} && echo cp {} \>/dev/null \;
find: missing argument to '-exec'

e

$ find Music -exec echo {} \; echo cp {} \>/dev/null \;
find: missing argument to '-exec'

e

$ find Music -exec echo {} \&\& cp {} \>/dev/null \;
Music && cp Music >/dev/null
...

Eu tentei

$ find Music -exec bash -c 'echo "{}" && echo cp \"{}\" /dev/null' \;
Music/4-Mat - Intro Music.mp3
cp "Music/4-Mat - Intro Music.mp3" /dev/null

Parece que funcionaria, mas deu

$ find Music -exec bash -c 'echo "{}" && cp \"{}\" /dev/null' \;
Music/4-Mat - Intro Music.mp3
cp: target '/dev/null' is not a directory

Quando tirei o segundo 'eco' para fora.

Aqui está uma pergunta semelhante, mas não a mesma: find com exec: como executar a ação condicional de várias etapas em cada arquivo

    
por Chloe 12.10.2017 / 19:11

1 resposta

5

Você parece ter percorrido as casas sem conseguir a combinação certa:

find Music -exec cp -v {} /dev/null \;

Você precisa de pelo menos dois parâmetros para cp , a (s) origem (s) e um destino, que pode ser um arquivo ou diretório. Quando você escapar de > , estará removendo suas propriedades de redirecionamento, portanto, >/dev/null se tornará um destino, procurando um subdiretório no diretório atual.

Note que você não pode especificar redirecionamentos individuais com a opção -exec : os parâmetros são passados diretamente para o programa agendado sem interpretação adicional da shell.

Para mim, geralmente prefiro essa construção para -exec :

find Music | while read -r l; do cp -v "$l" /dev/null; done

Eu posso usar todos os comandos shell normais na cláusula while , incluindo vários comandos, redirecionamentos, etc.

Observe que determinados caracteres em nomes de arquivos (por exemplo, novas linhas incorporadas ou espaços em branco à esquerda e à direita) impedirão que essa solução funcione, enquanto a resposta -exec original deve funcionar para todos os nomes de arquivos. Eu não tenho nenhum nome de arquivo, daí minha preferência.

    
por 12.10.2017 / 19:33