diretórios corrompidos, problema em excluí-los

diretórios corrompidos, problema em excluí-los

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

lsimprimirá 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 lsdeve 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 fapós o caminho nos findexemplos, 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 -xdevopção garante que findnã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 findopção adicional para retornar apenas arquivos.

informação relacionada