검색 한 폴더를 "찾기"에서 제외 시키려면 어떻게합니까?


18

다음 명령을 실행 중입니다.

find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;

폴더 아래의 모든 폴더를 삭제하고 싶습니다 processing(처리 폴더는 절대 삭제해서는 안됩니다).

이 명령은 processing폴더도 삭제합니다 . 해당 폴더 아래의 폴더 삭제하도록 스크립트를 제한하려면 어떻게합니까 ?


답변:


32

가장 쉬운 방법은을 추가 -mindepth 1하는 것입니다 . 첫 번째 깊이 계층을 건너 뛰고 부모 디렉토리를 제외합니다.

또한, 추가로 필요하지 않습니다 -exec에 전화를 rm할 수 있습니다, 단지 delete직접 폴더 들이있는 거 비어있는 경우.

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -delete

비어 있지 않은 경우 :

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -exec rm -rf {} \;

게으른 경우 와일드 카드를 확장 할 수도 있습니다. 이후 *(기본적으로 현재 디렉토리를 포함하지 않는 하지 않는 dotglob설정 ), 당신은 또한 할 수 :

find /var/www/html/content/processing/* -type d -mtime +1 -delete

그러나 dotglob옵션 으로 인해 숨겨진 폴더도 다시 포함되지 않습니다 .


안녕하세요, "찾기 : 경고 : 옵션이 아닌 인수 -type 뒤에 -mindepth 옵션을 지정했지만 옵션이 위치에 있지 않습니다 (-mindepth는 이전에 지정된 테스트와 그 뒤에 지정된 테스트에 영향을 미칩니다."옵션을 지정하십시오. "및"찾기 :`/ folder / 50d82faf0e09e ': 디렉토리를 비울 수 없습니다 "
Elad Dotan

입력하기 전에 mindepth를 추가하십시오. 비어 있지 않은 경우 디렉토리를 삭제하려면 원래 rm 접근 방식을 사용하면됩니다.
slhck

4

문제는 find가 다른 디렉토리와 함께 현재 디렉토리 (.)를 리턴하므로 처리 디렉토리와 서브 디렉토리를 삭제한다는 것입니다. 이 문제를 해결하는 빠른 방법은 옵션을 추가하는 것입니다.

-not -name .

find는 현재 디렉토리의 출력을 멈추고, 그 결과 삭제되지 않습니다.

처리 디렉토리 내에서 명령을 실행하는 경우 작동하므로 절대 경로를 사용하고 있다는 사실을 허용하십시오.

-not -name /var/www/html/content/processing

그리고 전체 명령은 다음과 같습니다.

find /var/www/html/content/processing -type d -mtime +1 -not -name /var/www/html/content/processing -exec rm -rf {} \;

마지막 명령이 잘못되었습니다. -namebasename을 나타내며 슬래시와 일치하는 항목은 없습니다. 을 사용해야 할 수도 있습니다 -path.
Kamil Maciorowski 님이

1

이미 대답했지만 여전히 다른 접근법을 나열하고 싶습니다.

find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d

이것은 최상위 디렉토리 (및 하위 디렉토리)를 제외하고 이제 우리가 적용하려는 모든 명령을 적용 할 수 있습니다.

>> 옵션 :
-mindepth 1 : 루트 디렉토리 제외
-maxdepth 1 : 하위 디렉토리 구문 분석을 피합니다. (질문에 따라 특정 시나리오의 경우 필요하지 않습니다).
-type d : 디렉토리 유형 만 나열합니다. 이 옵션은 mindepth maxdepth 사용 후에 나옵니다.


-maxdepth 1? 왜 -type d두 번? 이것이 허용되는 답변과 어떻게 다릅니 까?
Attie

@ Attie : 고마워, 실수를 고쳤다. maxdepth는 필요하지 않지만 하위 디렉토리를 나열하지 않으려는 경우에 유용합니다.
prashant
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.