답변1
이러한 파일을 삭제하는 적절한 방법은 inode
파일의 값을 사용하는 것입니다.
inode
값을 얻으려면 다음 명령을 사용하십시오.
ls -li
12582925 -rw-r--r-- 1 root root 646 May 23 02:19 ?ssolveIncpUL46pK.txt
긴 목록 결과의 첫 번째 필드는 inode 값입니다.
그런 다음 find 명령을 사용하여 wrt inode 파일을 삭제합니다.
find . -inum 12582925 -exec rm -i {} \;
답변2
이 역할은 물음표가 아닙니다. 이 ls
유틸리티는 인쇄할 수 없는 문자를 ?
. 인쇄할 수 없는 문자가 실제로 있는지 여부는 불분명합니다.첫 번째파일 이름의 문자이거나 앞에 하나 이상의 공백이 오는 문자입니다.
두 파일을 모두 제거하려면 "잘못된 부분"을 일치시킨 *
다음 표시되는 나머지 파일 이름을 더 자세히 지정하면 됩니다.
rm -i ./*ssolve*
먼저 주어진 패턴을 일치하는 모든 파일 이름으로 확장한 다음 rm
삭제합니다. 필요한 파일이 있는 경우 더 구체적으로 설명하고 파일 이름의 긴 부분을 지정하세요.아니요위의 짧은 패턴과 일치하는 콘텐츠를 제거하고 싶습니다.
rm -i ./*ssolveIncpUL46pK*
이는 삭제하려는 파일과 동일한 디렉토리에 있다고 가정합니다.
이 -i
옵션을 사용 rm
하면 실제로 항목을 삭제하기 전에 확인이 필요합니다.
답변3
파일을 삭제하기 위해 a를 사용하는 것은 권장되지 않습니다 *
. 당신이 원하는 것보다 더 많이 일치할 수 있습니다.
Debian에서 ls
(GNU의) 명령은 따옴표로 묶인 파일 값을 인쇄할 수 있습니다 .1] :
$ ls -Q
"\nssolve" "\n\nssolve" "y" "z"
또는 더 나은 방법은 인용된 이름과 inode를 사용하여 파일을 나열하는 것입니다.
$ ls -iQ
26738692 "\nssolve" 26738737 "\n\nssolve" 26738785 "y" 26738786 "z"
그런 다음 rm 및 inode 번호를 사용하여 올바른 파일만 삭제되었는지 확인합니다.
$ find . -xdev -inum 26738737 -exec rm -i {} \;
-xdev
다른 파일 시스템에서 동일한 inode 번호를 가진 파일이 일치하는 것을 피하기 위해 find 호출은 하나의 파일 시스템( )으로 제한됩니다 . 또한 (대화형) 옵션을 사용 rm
하여 호출 중이므로 -i
명령줄에서 각 파일을 삭제해야 하는지 묻는 메시지가 표시됩니다.
[1]а
이것은 키릴 문자 ($'\U430')와 라틴어 ($'\U61') 와 같이 시각적으로 혼동되는 문자의 문제를 해결하지 못하지만 a
실제로는 동일하지 않습니다. 파일 이름에 사용된 바이트를 더 잘 보려면 16진수 뷰어를 사용해야 합니다.
$ touch а a é $'e\U301' $'\U301'e
$ ls
a ́e é é а # what you "see" here depends on your system.
$ printf '<%s>' * | od -An -c
< a > < 314 201 e > < e 314 201 > < 303 251
> < 320 260 >