
Há um diretório no meu sistema Linux devido a algum mau funcionamento do software, alguns diretórios com nome de lixo eletrônico, como você pode ver abaixo, foram criados, tenho problemas para excluí-los,
$ ll
total 1532
drwxr-xr-x 2 sensage sensage 4096 Apr 19 16:56 -?$??
drwxrwxr-x 248 sensage sensage 4096 Apr 23 11:37 .
drwxrwxr-x 99 sensage sensage 4096 Apr 16 14:23 ..
drwxr-xr-x 2 sensage sensage 4096 Apr 6 14:54 }???;?
drwxr-xr-x 2 sensage sensage 4096 Apr 19 03:01 }??=?|
-rw-r--r-- 1 sensage sensage 88 Apr 22 13:37 $
drwxr-xr-x 2 sensage sensage 4096 Apr 2 12:43 ?
drwxr-xr-x 2 sensage sensage 4096 Mar 20 02:51 ?=??&?
drwxr-xr-x 2 sensage sensage 4096 Apr 11 08:40 ?;%??;
drwxr-xr-x 2 sensage sensage 4096 Apr 14 09:38 ?:????
drwxr-xr-x 2 sensage sensage 4096 Mar 22 17:21 ?(?>~?
drwxr-xr-x 2 sensage sensage 4096 Apr 1 13:45 ?[???%
drwxr-xr-x 2 sensage sensage 4096 Apr 3 14:03 ?@????
drwxr-xr-x 2 sensage sensage 4096 Apr 12 16:18 ??
drwxr-xr-x 2 sensage sensage 4096 Apr 17 16:38 ??&???
drwxr-xr-x 2 sensage sensage 4096 Mar 25 02:43 ??+???
drwxr-xr-x 2 sensage sensage 4096 Apr 19 00:46 Ü¡?,??
drwxr-xr-x 2 sensage sensage 4096 Mar 28 18:54 ÚŸ??"?
drwxr-xr-x 2 sensage sensage 4096 Mar 27 01:04 ???(?
drwxr-xr-x 2 sensage sensage 4096 Apr 19 22:41 ??ͨ?`
drwxr-xr-x 2 sensage sensage 4096 Apr 15 11:44 ?????-
como você pode ver os nomes dos diretórios em azul. quando quero excluí-los, recebo o erro abaixo:
$ ls -1 | grep -v 20 | xargs rm -rf
xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option
rm: invalid option -- ¼
Try `rm ./'-¼$Þ¸Í'' to remove the file `-\274$\336\270\315'.
Try `rm --help' for more information.
o que devo fazer com eles?
Responder1
ls
imprimirá caracteres não ASCII (ou melhor, caracteres não suportados na localidade atual) como ?
. Esta é uma das razões pelas quais analisar a saída de ls
é uma coisa ruim de se fazer. A saída de ls
deve serolhou para. Em alguns casos, como este, esses não são os nomes reais que existem no sistema de arquivos.
Em vez disso, tente algo como (isso irá excluirtodosarquivos e diretórios, incluindo /path/to/dir
)
rm -rf /path/to/dir
ou
find /path/to/dir -delete
ou
find /path/to/dir -exec rm -rf {} +
ou
find /path/to/dir -print0 | xargs -0 rm -rf
Modifique para atender às suas necessidades. Para excluir apenas arquivos, adicione -type f
após o caminho nos find
exemplos, por exemplo.
Fazendo apenasrm -rf *
dentro desse diretório(isso éimportante, o diretório de trabalho atual deve ser o diretório cujos arquivos e diretórios você deseja excluir) também pode ser suficiente.
Veja tambémPor quenãoanalisar ls
?
Responder2
Um método alternativo para remover facilmente diretórios e/ou arquivos nomeados com caracteres não imprimíveis é verificar o número do inode dos diretórios (ou arquivos) errados e, usando-o, excluir o diretório (ou arquivo):
cd /mypath || exit 1
ls -il #...to show the inode <number> in the leftmost column output
find . -xdev -inum <number> -exec rm -rf {} +
A -xdev
opção garante que find
não desça diretórios em outros sistemas de arquivos. É garantido que os números de inode sejam exclusivos apenas dentro de um sistema de arquivos.
Adicione '-f' como uma find
opção adicional para retornar apenas arquivos.