저는 Amazon Linux, bash 쉘을 사용하고 있습니다. 특정 홈 디렉터리에서 "target"이라는 이름의 모든 하위 디렉터리를 삭제하는 명령문을 작성하려고 합니다. 디렉토리가 존재하지 않아도 오류가 발생하지 않는 이와 같은 내용을 작성하고 싶습니다. 다음을 시도했지만 오류가 발생합니다.
[jboss@mydevbox ~]$ find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -print0 | xargs rm -rf
xargs: Warning: a NUL character occurred in the input. It cannot be passed through in the argument list. Did you mean to use the --null option?
위 내용을 어떻게 하면 더 잘 쓸 수 있을까요?
답변1
를 사용하는 경우 이름을 올바르게 읽을 수 있도록 이 플래그를 -print0
사용해야 합니다 .-0
xargs
find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -print0 | xargs -0 rm -rf
또는 GNU가 있는 경우 find
해당 플래그를 사용할 수 있지만 -delete
디렉터리가 비어 있지 않으면 작동하지 않습니다.
find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -delete
-exec
또는 find와 함께 사용할 수도 있습니다 .
find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -exec rm -rf {} +
답변2
Modern find
(POSIX를 통해, OpenBSD의 GNU가 아닌 경우 이를 지원함)은 find
양식을 통해 호출하지 않고도 필요한 작업을 수행할 수 있습니다.xargs
-exec command {} +
find ... -exec rm -rf '{}' \+