특정 파일을 제외하고 솔라리스의 모든 파일 + 폴더를 반복적으로 삭제합니다.

특정 파일을 제외하고 솔라리스의 모든 파일 + 폴더를 반복적으로 삭제합니다.

다음 명령은 104.tar파일을 제외한 폴더의 모든 항목을 재귀적으로 삭제합니다 /tmp/CURRENT.

find /tmp/CURRENT/ -type f ! -name '104.tar' -exec rm -rf {} +

그러나 그 아래의 하위 폴더는 반복적으로 삭제되지 않습니다 /tmp/CURRENT.

주면 -type d도움이 될 수도 있지만 별도의 명령은 필요하지 않습니다. 내 요구 사항은 아래에서 시도한 것과 동일한 단일 명령을 사용하여 파일과 폴더를 삭제하는 것이지만 도움이 되지 않았습니다.

find /tmp/CURRENT/ -type f -type d ! -name '104.tar' -exec rm -rf {} +

-type옵션을 전혀 지정하지 않으면 명령은 /tmp/CURRENT폴더 내용이 아닌 전체 폴더를 삭제합니다!

참고: 내 운영 체제는 Sun Solaris Sparc입니다.

뭔가 제안해주실 수 있나요?

답변1

사용하시면서 말씀 -type f하시는데find오직파일만 생각하세요. 따라서 디렉터리가 삭제되지 않는 것이 정상입니다. 자체 삭제를 방지하려면 /tmp/CURRENT/다음을 시도해 보세요.

  1. find이를 지원하는 경우 -mindepth( findLinux 시스템의 기본값인 GNU에 이 기능이 있지만 이를 지원할 수 있는 다른 버전은 모르겠습니다 find) 적어도 한 수준 이전의 콘텐츠만 보도록 지시할 수 있습니다.

    find /tmp/CURRENT/  ! -name '104.tar' -mindepth 1 
    
  2. !이를 제외하려면 두 번째 연산자를 사용하십시오 .

    find /tmp/CURRENT/ ! -path /tmp/CURRENT/ ! -name '104.tar' 
    
  3. 를 사용하여 -path최소한 한 문자로 시작 /tmp/CURRENT하고 뒤에 최소한 한 문자가 오는 경로를 찾으십시오.

    find /tmp/CURRENT/ -path '/tmp/CURRENT/?*' ! -name '104.tar' 
    

세 가지 경우 모두 -exec rm -r {} +명령 끝에 추가하여 일치 항목을 제거할 수 있습니다.

하지만 이 명령은 제거된다는 점에 유의하세요.모든 것특정 파일을 제외하고 /tmp/CURRENT/104.tar. 따라서 하위 디렉토리에 /tmp/CURRENT/dir1/104.tar지정된 파일이나 다른 파일이 있는 경우 104.tar해당 파일은 삭제됩니다. 이것이 원하는 것이 아니라면 질문을 편집하여 명확히 하십시오.

/tmp/CURRENT물론, 단지 모든 항목을 제외하고 제거하려는 경우에는 /tmp/CURRENT/104.tar전혀 필요하지 않습니다. findBash에서 실행할 수 있습니다.

shopt -s extglob
rm -r /tmp/CURRENT/!(104.tar)

관련 정보