내 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
다른 파일 시스템의 디렉터리가 삭제되지 않습니다. Inode 번호는 파일 시스템 내에서만 고유함을 보장합니다.
find
파일만 반환하려면 추가 옵션 으로 "-f"를 추가하세요 .