Bash를 사용하여 숨겨진 파일과 디렉토리를 모두 삭제하는 방법은 무엇입니까?


28

확실한 솔루션은 종료 코드 1을 생성합니다.

bash$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
bash$ echo $?
1

하나의 가능한 해결책은 "."를 건너 뜁니다. 및 ".."디렉토리를 포함하지만 이름이 3자를 초과하는 파일 만 삭제합니다.

bash$ rm -f .??*

제거 할 수없는 것에 대해 너무 걱정하지 않는다면. & .. 그렇다면 누가 신경 쓰나요? 스크립트에서 추악한 출력에 대해 걱정하지 않으면 분명한 해결책은 다른 사람보다 솔직하게 타이핑하는 것이 적다고 생각합니다.
— Matt

당신도 알다시피 .. 그리고. 파일이 아닙니다. 디렉토리에 대한 참조입니다. . (단일 도트)는 현재 디렉토리이고 .. (두 도트)는 디렉토리의 레벨을 한 단계 올립니다. 예를 들어, cd / home / user 인 경우. / home / user와 같고 ..은 / home /입니다. 즉,을 (를) 삭제할 수 없습니다. and .. (.?)
— phuzion

주석에 감사드립니다. 나는 종종 명령 종료 코드 검사 (set -e)와 함께 스크립트에서 명령을 사용합니다. 이 경우 표시 종료 코드가 필요합니다.
— Yonatan Broza

고유 한 것은 없습니다. .. rm -rf로 삭제되지 않도록 보호합니다. 이것은 rm의 최신 변형에 추가 된 보호 메커니즘 일뿐입니다.
— kubanczyk 2009

그리고 항상 rm -rf가 있습니다. * || 해당 명령문에 대해 set -e 동작을 해결하려는 경우 true입니다.
— 도밍고 이그나시오 Galdos

답변:


34
rm -rf. [^.]. ?? *

모든 경우를 파악해야합니다. . ?? *는 3 개 이상의 문자 파일 이름과 일치하며 (이전 답변에서 설명한대로). [^.]은 두 개의 문자 항목 (.. 이외)을 포착합니다.


답변 해주셔서 감사합니다! 그것에 기초하여 나는 또한 "rm -rf. [^.] *"의 더 짧은 버전에 도착했다.
— Yonatan Broza

4
더 짧은 버전을 조심하십시오. 비슷하지만 동일한 결과는 아닙니다. 앞면에 두 개의 점이있는 이름과 일치하지 않습니다 (예 : 루트킷 등을 숨기고있는 "... /")
— Russell Heilling

그리고 PWD 확인을 조심하거나 모든 설정을 풀어야합니다. :)
— kommradHomer

이것은 작동하지 않는 것 같습니다 zsh. 어떤 제안?
— ryanjdillon

함께 zsh기본적으로 비어있는 와일드 카드 일치 오류로 처리됩니다; 반면 bash단순히 변경되지 않고 전달됩니다. zsh같은 방식으로 동작 하려면 명령을 사용할 수 있습니다unsetopt nomatch
— Russell Heilling

1
find -path './.*' -delete

이것은 현재 디렉토리의 모든 파일과 일치하며 a로 시작하여 .재귀 적으로 삭제합니다. 숨겨지지 않은 디렉토리의 숨겨진 파일은 건드리지 않습니다.

디렉토리에서 모든 것을 지우고 싶다면 find -delete충분합니다.


이 항목은 다음 항목으로 시작하는 항목뿐만 아니라 모든 항목을 삭제합니다..
— kasperd

오, "숨겨진 파일을 포함한 모든 것을 삭제합니다"라는 질문을 잘못 읽은 것 같습니다.
— 프리츠

@kasperd 감사합니다. 이제 질문에 실제로 답해야합니다.
— 프리츠

0

가장 좋은 방법은 아마도 :

  • 찾기 -iname. * -maxdepth 1-타입 f -exec rm {} \;

변경 RM 에 LS는 -l 그냥 u는 추가 할 수 있습니다 출력 장황, 삭제 될 것입니다 무엇을보고 싶다면 -v 에 옵션 RM은

  • -type f 옵션은 find 명령이 파일 만 찾도록 지시 합니다 (dir, link 등 생략).
  • -maxdepth 1 지시 찾을 하위 디렉토리로 내려 가지 않는

추신. '\;'로 끝나는 것을 잊지 마십시오


1
꼼꼼한! 당신은 -iname '. *'또는 -iname. *을 의미합니다. 그리고 .. 어쨌든 다시.
— 도밍고 이그나시오 갈라 도스 2

-1
ls -la | awk '$NF ~ /^\.[^.]+/  {print $NF}' | xargs rm -rf

ls -la ............. long list (all files and folders)
$NF ................ last field (file or folder name)
~   ................ Regular Expression match
/^\.[^.]+/ ......... dot followed by not dot at least once +

If the last field $NF match pattern show it and send 
it to xargs which will perform the task.

파일 이름에 공백이있는 순간이 끊어집니다.
— CVn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.