손상된 디렉터리, 삭제 문제

손상된 디렉터리, 삭제 문제

일부 소프트웨어 오작동으로 인해 내 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

lsASCII가 아닌 문자(또는 현재 로케일에서 지원되지 않는 문자)를 로 인쇄합니다 ?. 이것이 출력을 구문 분석하는 것이 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다른 파일 시스템의 디렉토리를 내려가지 않도록 보장합니다. Inode 번호는 파일 시스템 내에서만 고유함을 보장합니다.

find파일만 반환하려면 추가 옵션으로 '-f'를 추가하세요 .

관련 정보