
Hay un directorio en mi sistema Linux debido a un mal funcionamiento del software, se crean algunos directorios con nombres basura como puede ver a continuación, tengo problemas para eliminarlos.
$ 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 puede ver los nombres de los directorios en azul. cuando quiero eliminarlos me sale el siguiente error:
$ 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.
¿Qué debo hacer con ellos?
Respuesta1
ls
imprimirá caracteres que no sean ASCII (o más bien, caracteres no admitidos en la configuración regional actual) como ?
. Esta es una de las razones por las que analizar el resultado de ls
es algo malo. La salida de ls
está destinada a sermiró. En algunos casos, como este, esos no son los nombres reales que existen en el sistema de archivos.
Pruebe en su lugar algo como (estos eliminarántodoarchivos y directorios, incluidos /path/to/dir
)
rm -rf /path/to/dir
o
find /path/to/dir -delete
o
find /path/to/dir -exec rm -rf {} +
o
find /path/to/dir -print0 | xargs -0 rm -rf
Modifique para adaptarlo a sus necesidades. Para eliminar solo archivos, agregue -type f
después de la ruta en los find
ejemplos, por ejemplo.
haciendo solorm -rf *
dentro de ese directorio(eso esimportante, el directorio de trabajo actual debe ser el directorio cuyos archivos y directorios desea eliminar) también puede ser suficiente.
Ver tambiénPor quénoanalizar ls
?
Respuesta2
Un método alternativo para eliminar fácilmente directorios y/o archivos nombrados con caracteres que no se imprimen es determinar el número de inodo de los directorios (o archivos) errantes y, utilizándolo, eliminar el directorio (o archivo):
cd /mypath || exit 1
ls -il #...to show the inode <number> in the leftmost column output
find . -xdev -inum <number> -exec rm -rf {} +
La -xdev
opción asegura que find
no descienda de directorios en otros sistemas de archivos. Se garantiza que los números de inodo serán únicos sólo dentro de un sistema de archivos.
Agregue '-f' como find
opción adicional para devolver solo archivos.