해당 디렉토리의 하위 디렉토리를 제외한 디렉토리에서 모든 파일을 삭제하는 방법은 무엇입니까?

해당 디렉토리의 하위 디렉토리를 제외한 디렉토리에서 모든 파일을 삭제하는 방법은 무엇입니까?

나는 bash 쉘을 사용하고 있습니다. 특정 디렉토리의 모든 JAR 파일을 삭제하는 명령이 있습니다

find ~/.jenkins/jobs/subco/ -name '*.jar' -print0 | xargs -0 -r rm

그러나 "~/.jenkins/jobs/subco/myapp"에 있는 JAR 파일을 제외한 모든 JAR 파일을 삭제하도록 위의 내용을 수정하고 싶습니다. JAR 파일이 해당 특정 디렉터리에서 삭제되는 것을 제외하고 다른 모든 디렉터리에서도 삭제되도록 위 명령을 어떻게 수정할 수 있습니까?

답변1

-prune옵션을 사용하여 디렉터리를 건너뛰세요.

find ~/.jenkins/jobs/subco -path ~/.jenkins/jobs/subco/myapp -prune -o -name '*.jar' -exec rm -r {} +

답변2

노력하다:

(
  cd ~/.jenkins/jobs/subco
  find . -path ./myapp -prune -o -type f -name '*.jar' -print0 | ...
)

-type fJAR 파일만 일치시키려는 경우 제한에 추가하세요 . 그리고, 당신은 그것을 사용했고 , 그것을 지원할 -print0가능성이 있으므로 다음을 사용할 수 있습니다:find-delete

(
  cd ~/.jenkins/jobs/subco
  find . -path ./myapp -prune -o -type f -name '*.jar' -delete
)

POSIX적으로:

(
  cd ~/.jenkins/jobs/subco
  find . -path ./myapp -prune -o -type f -name '*.jar' -exec rm -f {} +
)

GNU find를 사용하면 -execdir사용을 피할 수 있습니다-exec경쟁 조건, 일부도 참조하세요GNU Find 매뉴얼의 보안 고려 사항.

-delete가능하면 항상 사용해야 합니다 .

관련 정보