Como usar encontrar quando houver espaços nos nomes dos diretórios?

4

Eu preciso encontrar todos os arquivos .nfo no meu diretório de mídia para que eu possa usar sed para alterar algumas partes. O problema é que minhas pastas têm espaços nos nomes.

find  /media/media1/HDTV -name  \*.nfo -type f 
media/media1/HDTV/Band of Brothers/Season 1/
…

O arquivo de saída não será encontrado por um comando sed para alterar as seqüências desejadas.

    
por papampi 09.06.2012 / 13:48

2 respostas

6

find não se preocupa com caracteres especiais em nomes de arquivos, mas o programa que está analisando a saída de find pode. Se você estiver usando xargs , use a opção -print0 para find e a opção -0 para xargs . Isso diz a find e xargs para usar caracteres nulos (que não podem aparecer em nomes de arquivos) como um separador entre nomes de arquivos e xargs para não fazer nenhuma outra análise que manivesse nomes de arquivos contendo espaços.

find /media/media1/HDTV -name '*.nfo' -type f -print0 |
xargs -0 sed -i 's/pattern/replacement/'

Outra maneira de invocar um comando em muitos arquivos é usar apenas find .

find /media/media1/HDTV -name '*.nfo' -type f -exec sed -i 's/pattern/replacement/' {} +
    
por Gilles 09.06.2012 / 14:09
-2

Digite normalmente, mas coloque um \ após a palavra e antes do espaço.

i.e. cd ~/home/New\ Volume/movies/new\ stuff

    
por Rohit 09.06.2012 / 14:00

Tags