Поврежденные каталоги, проблема с их удалением

Поврежденные каталоги, проблема с их удалением

В моей системе Linux есть каталог, в котором из-за сбоя программного обеспечения были созданы каталоги с нежелательными именами, как вы можете видеть ниже. У меня возникли проблемы с их удалением.

$ 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 ?????-

как вы видите, имена каталогов выделены синим цветом. Когда я хочу удалить их, я получаю следующую ошибку:

$ 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.

что мне с ними делать?

решение1

lsвыведет не-ASCII символы (или, скорее, символы, не поддерживаемые в текущей локали) как ?. Это одна из причин, по которой анализ вывода ls— плохая идея. Вывод из lsдолжен бытьпосмотрел на. В некоторых случаях, как в этом, это не настоящие имена, существующие в файловой системе.

Попробуйте вместо этого что-нибудь вроде (они удалятвсефайлы и каталоги, включая /path/to/dir)

rm -rf /path/to/dir

или

find /path/to/dir -delete

или

find /path/to/dir -exec rm -rf {} +

или

find /path/to/dir -print0 | xargs -0 rm -rf

Измените в соответствии с вашими потребностями. Чтобы удалить только файлы, добавьте -type fпосле пути в findпримерах, например.

Делаю толькоrm -rf * внутри этого каталога(этоважный(текущий рабочий каталог должен быть каталогом, файлы и каталоги которого вы хотите удалить) также может быть достаточно.

Смотрите такжеПочемунетразобрать ls?

решение2

Альтернативный метод простого удаления каталогов и/или файлов, имена которых содержат непечатаемые символы, заключается в определении номера inode ошибочных каталогов (или файлов) и использовании его для удаления каталога (или файла):

cd /mypath || exit 1
ls -il    #...to show the inode <number> in the leftmost column output
find . -xdev -inum <number> -exec rm -rf {} +

Опция -xdevгарантирует, что findне спустится в каталоги других файловых систем. Номера инодов гарантированно будут уникальными только в пределах файловой системы.

Добавьте «-f» в качестве дополнительной findопции, чтобы вернуть только файлы.

Связанный контент