괄호로 시작하는 모든 파일 삭제

괄호로 시작하는 모든 파일 삭제

내 디렉토리에 괄호로 시작하는 파일이 많이 있습니다. 충돌로 인해 Dropbox에서 생성됩니다. 이스케이프 조합이 도움이 되지 않는 것 같습니다.

rm -rf "(*"
rm -rf "\(*"
rm -rf \(*

Frost Schutz가 언급했듯이 ASCII 문자가 아닌 것 같습니다. 이것이 사실인지 어떻게 알 수 있으며 해결책은 무엇입니까?

답변1

셸은 여기에서 고려해야 하는 특정 규칙을 사용하여 명령줄을 해석합니다.

  • \를 사용하여 셸 메타 문자를 이스케이프하여 일반 문자처럼 동작하도록 할 수 있습니다.

  • 작은따옴표나 큰따옴표를 사용하면 이러한 셸 메타 문자의 대부분(큰따옴표 포함) 또는 전체(작은따옴표 포함)에서 특별한 의미를 잃을 수 있습니다.

  • 따옴표는 단어 경계에 있을 필요가 없으므로 와 rm th"is fil"e동일합니다 rm "this file".

  • 파일 이름 확장에는 []?* 문자를 사용할 수 있습니다. 이러한 목적으로 인용되거나 이스케이프 처리되어서는 안 됩니다.

따라서 귀하의 경우에 가능한 해결책은 rm -rf '('*및 입니다. 귀하의 경우 마지막 것이 왜 작동하지 않는지 모르겠습니다. 괄호 앞에 공백이 있을 수도 있나요?rm -rf "("*rm -rf \(*

다음 줄을 사용하면 파일 이름에 흥미로운 문자가 있는지 확인할 수 있습니다.

for i in *; do od -c <<< "$i"; done

답변2

*안에 넣으면 "그렇지 않으면 '확장되지 않습니다(그냥 리터럴임 *).

*하지만 외부에 넣을 수는 있습니다 ".

rm "("*

rm \(*그러나 이는 귀하가 이미 게시한 내용과 동일합니다. 따라서 이것이 작동하지 않으면 파일이 (결국 ASCII 문자로 시작하지 않거나(일부 유니코드 문자는 매우 유사해 보임) 잘못된 위치에서 시도하고 있는 것입니다.

답변3

시도해 볼 수 있는 두 가지 작업은 다음과 같습니다.

1)rm -f \\(*

-r(재귀적으로 디렉터리를 삭제하려는 경우가 아니면 그럴 필요가 없습니다. "파일"이라고 하셨으므로 그대로 두겠습니다. rm -rf위험한 도구이므로 필요하지 않으면 사용하면 안 됩니다.)

2) rm -i *

이 방법에는 약간의 수동 개입이 필요하지만 영숫자가 아닌 문자가 먼저 정렬되는 경향이 있으므로 제거하려는 문자가 먼저 나타나는 경향이 있으며 ^C해당 문자를 얻은 후 를 실행할 수 있습니다.

이상한 와일드카드를 사용하려고 할 때는 first echo대신 in을 사용해 보세요 rm. 특히이 방법을 사용하면 rm -rf쉘이 삭제하기 전에 확장된 것으로 생각하는 것이 무엇인지 확인할 수 있습니다. 특히 때때로 이러한 유형의 파일은 사용자가 의도한 것보다 더 많은 파일을 날려버리고 어리석은 짓을 하길 원하는 누군가에 의해 생성되기 때문입니다.

답변4

이러한 파일을 한 번만 정리하면 되는 경우 해당 파일을 파일에 나열하면 됩니다.

$ ls -1 > delete-list

delete-list다음으로, 삭제하려는 파일의 이름만 포함되도록 수동으로 편집하세요 . 마침내:

$ xargs --delim=\\n rm < delete-list

이름이 공백과 잘 어울리면 편집증 --delim옵션을 제거할 수 있습니다.

관련 정보