diretórios corrompidos, problema em excluí-los

5

Existe um diretório no meu sistema Linux por causa de algum mau funcionamento do software. Alguns diretórios com nome de lixo eletrônico, como você pode ver abaixo, são criados, eu tenho problema em deletá-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 eu quero apagá-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 '-4$605'.
Try 'rm --help' for more information.

o que devo fazer com eles?

    
por amir jj 23.04.2017 / 14:49

2 respostas

11

ls imprimirá caracteres não-ASCII (ou caracteres não suportados no local atual) como ? . Esta é uma das razões pelas quais analisar a saída de ls é uma coisa ruim a se fazer. A saída de ls deve ser vista . Em alguns casos, assim, esses não são os nomes reais que existem no sistema de arquivos.

Tente, em vez disso, algo como (esses arquivos serão excluídos de todos 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 exemplos find , por exemplo.

Fazer apenas rm -rf * dentro desse diretório (que é 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ém Por que não analisa ls ?

    
por 23.04.2017 / 14:54
4

Um método alternativo para remover facilmente diretórios e / ou arquivos nomeados com caracteres não imprimíveis, é verificar o número de inode dos diretórios errantes (ou arquivos) 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 opção -xdev garante que find não desça diretórios em outros sistemas de arquivos. Os números de inodes são garantidos como únicos somente dentro de um sistema de arquivos.

Adicione '-f' como uma opção adicional find para retornar apenas arquivos.

    
por 23.04.2017 / 16:44