Exclua todos os arquivos começando com um ponto de interrogação

23

Eu tenho uma pasta na qual tenho cerca de arquivos 4k. Alguns desses arquivos começam com aa ?ou !caractere. Preciso excluí-los, mas não consigo encontrar uma expressão que faça isso:

rm -f ./?*

apenas apaga tudo. É possível usar o grepsl e direcionar os xargsarquivos para outra pasta, mas esperava que houvesse uma maneira adequada de fazer isso. Precisa de ajuda nos arquivos ?e !.

reclusão
fonte

Respostas:

26

Não há necessidade de qualquer coisa extravagante. Simplesmente escape do ?modo que não seja considerado parte da glob:

rm -f ./\?*

Isso funciona !também para :

rm -f ./\!*

Ou de uma só vez:

rm -f ./{\?,\!}*

Atualizar

Só notei que você estava sugerindo grepa saída de ls. Eu queria chamar sua atenção para o fato de que você não deve analisar a saída de ls

Joseph R.
fonte
4
@recluze Não é estúpido; está longe de ser óbvio como fazê-lo se você não souber como escapar de caracteres curinga.
um CVn 13/07/2013
@recluze Ainda se sente estúpido após 5 votos na sua pergunta? :) A propósito, veja a resposta atualizada.
Joseph R.
Obrigado e obrigado :) ... Estava ciente dos problemas na saída ls, mas meus arquivos tinham um padrão específico em que eu podia contar. No entanto, é bom saber :)
recluze
13

No meu caso, os caracteres não eram realmente pontos de interrogação, mas caracteres unicode que aparentemente não puderam ser exibidos no meu console.

Usando rm -i *funcionou para mim. Se você não quiser fazer isso, também poderá excluir por inode, conforme descrito em http://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html .

Para encontrar o inode, use:

ls -il

Então faça:

find . -inum [inode-number] -exec rm -i {} \;
Jonathan
fonte