다음 명령은 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/
다음을 시도해 보세요.
find
이를 지원하는 경우-mindepth
(find
Linux 시스템의 기본값인 GNU에 이 기능이 있지만 이를 지원할 수 있는 다른 버전은 모르겠습니다find
) 적어도 한 수준 이전의 콘텐츠만 보도록 지시할 수 있습니다.find /tmp/CURRENT/ ! -name '104.tar' -mindepth 1
!
이를 제외하려면 두 번째 연산자를 사용하십시오 .find /tmp/CURRENT/ ! -path /tmp/CURRENT/ ! -name '104.tar'
를 사용하여
-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
전혀 필요하지 않습니다. find
Bash에서 실행할 수 있습니다.
shopt -s extglob
rm -r /tmp/CURRENT/!(104.tar)