디렉터리가 손상되어 삭제하는 데 문제가 있습니다.

디렉터리가 손상되어 삭제하는 데 문제가 있습니다.

내 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"를 추가하세요 .

관련 정보