내 디렉토리에 괄호로 시작하는 파일이 많이 있습니다. 충돌로 인해 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
옵션을 제거할 수 있습니다.