2011-01-28 2 views
1

bash에서 find 명령에 관한 질문이 있습니다. 캐시라는 모든 디렉토리를 제거하려고합니다. find -name에서 큰 따옴표는 무엇을합니까?

는 "캐시"

find . -name "Cache" -print 

라고 모든 디렉토리/파일을 찾지 만이이를 제거하지 않고 내 말은 찾을에서 오류가 잔뜩있어 그 "해당 파일 또는 디렉토리".

find . -name "Cache" -exec rm -rf {} \; 

그러나 이것은

find . -name Cache -exec rm -rf {} \; 

작동이 공백 또는 영숫자가 아닌 문자가 없습니다. 아무도 내가 무슨 일이 일어나는지 이해할 수있게 도와 줄 수 있습니까? 고맙습니다.

+5

을하기 전에이 안전한 방법을

find . -name "Cache" -exec echo "rm -rf \"{}\"" \; > to_be_deleted.txt 

한 번 확인 to_be_delete.txt을 고려할 수 있습니다. – DigitalRoss

+0

@Digital : 동의 함. 두 번째와 세 번째 코드가 다른 결과를내는 것은 완전히 불가능합니다. – Philipp

+1

@ DigitalRot 아마 두 번째 실행에서 그는 이미 모든 것을 삭제 했으므로 오류가 없습니다. –

답변

5

이것은 따옴표와는 아무 관련이 없습니다. 디렉토리가 지워지고 있기 때문에 "No such file or directory"가 표시되는 이유는 -prune을 잊어 버렸기 때문에 으로 내려갑니다. 물론 더 이상 존재하지 않으므로 오류 메시지가 표시됩니다.

find . -name "Cache" -exec rm -rf {} \; -prune 
+0

그게 정확히 무슨 일이야 ... 고마워! –

1

find-depth 옵션은 때때로 디렉토리 내용은 디렉토리 자체 전에 처리 할 강제로 ...이 같은 작업에서 "파일을 찾을 수 없습니다"오류를 제거하는 데 사용됩니다.

인용문이 귀하의 예를 어떻게 변화 시켰는지 나는 알 수 없습니다. 그들은 둘 다 동일한 디렉토리 구성에 대해 실행 되었습니까? 아니면 오류를 생성하고 디렉토리 구조를 수정 했습니까? 다른 하나를 시도해보십시오.

+0

방금 ​​인용 된 찾기 명령으로 디렉토리가 삭제되었는지 확인하는 것을 잊어 버렸음을 깨달았습니다. 내 실수 ... 따옴표 또는 실제로 아무런 차이를 만들지 않았다. 감사! –

0

이중 인용 부호는 일부 배시 확장을 방지합니다. 당신은 큰 따옴표, Cache*는 bash에 의해 얻을 것이며, 현재 디렉토리만을 Cache 파일이 일치합니다을 제거 할 경우 예를 들어, 당신은

find . -name "Cache*" 

에 의해 캐시로 시작하는 모든 파일을 찾을 수 있습니다.

이러한 문자를 사용하지 않으므로 큰 따옴표로 묶는 것이 필요하지 않습니다.

0

-prune 옆에, 당신은 아마 내가 당신을 믿지 않는다

sh to_be_deleted.txt 
+0

'find -name Cache -okdir rm -rf {} \;'를 대신 사용해보십시오. 당신은 "말할 필요가 없습니다." 이것이 기본값이기 때문입니다. '캐시'에는 여백이 없기 때문에 마스킹이 필요하지 않습니다. –

관련 문제