명령줄에서 이름이 "?"로 시작하는 파일을 삭제합니다.

명령줄에서 이름이 "?"로 시작하는 파일을 삭제합니다.

저는 Debian stable, Cinnamon DE에서 실행 중이고 명령줄을 사용하여 삭제하고 싶은 파일이 있습니다(지금은 Nemo를 사용하여 이 파일을 삭제합니다).

예를 들어, 다음 .txt파일은 "?"로 시작하며 쉘 및 Nemo에서는 캐리지 리턴으로 대체됩니다.

$@debian: ls
ssolveIncpUL46pK  ?ssolveIncpUL46pK.txt

니모

나는 시도했다:

 rm ?ss*
 rm \?ss*
 rm \ ss*

답변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   >

관련 정보