Como remover um arquivo com caracteres não imprimíveis no Mac OS X Terminal [duplicado]

7

Eu tenho uma pasta que tem um arquivo cujo nome é Icons e termina com um caractere não imprimível. Eu posso ver o unprintable se eu ls com opção -B:

$ ls -B
$ Icon5

se eu usar ls -b eu recebo:

$ ls -b
$ Icon\r

Eu gostaria de excluir o arquivo, mas não consigo encontrar uma maneira de digitar o caractere não imprimível. Se eu fizer:

$ rm Icon5

Eu recebo:

$ Icon5: No such file or directory

Se eu fizer:

$ rm Icon\r

Eu recebo:

$ Icon\r: No such file or directory

Eu poderia excluir a pasta inteira, mas preciso de uma maneira mais genérica de fazer isso, pois esses arquivos aparecem em muitas pastas de usuários.

    
por Periodic Maintenance 25.12.2012 / 13:57

3 respostas

3

O shell transformará automaticamente cada CR ( \r ) em um LF ( \n ) e executará o comando anterior. No entanto, você pode usar echo para produzir um caractere LF. Todos estes devem funcionar:

rm $(echo -e "Icon\r")

rm $(echo -e "Icon5")

echo -e "Icon\r" | xargs rm

echo -en "Icon\r" | xargs -0 rm

A última opção deve ser bastante robusta e lidar com todos os possíveis caracteres estranhos.

    
por 25.12.2012 / 15:38
2

Existem várias maneiras de incluir caracteres não imprimíveis em uma linha de comando. A opção mais simples (bash-only) é usar $ antes de uma string entre aspas simples, o que faz com que o bash escape de substituição dentro da string. Note que ele lida com vários tipos de seqüências de escape, então ambos funcionariam:

rm $'Icon\r'
rm $'Icon5'

Ou, você pode digitar Control-V antes de Control-M (também conhecido como return), que informa ao shell "o próximo caractere que eu digito deve ser incluído literalmente no comando":

rm Icon^V^M

(Note que o ^ V não é realmente parte do comando, por isso não vai ecoar na linha de comando).

    
por 25.12.2012 / 17:47
0

Para um caractere não imprimível, você pode usar '?' como um caractere curinga para um caractere. Então, abc? Def? .Zip significaria abc1def2.zip e também abc! Def # .zip.

    
por 25.12.2012 / 20:46