find에서 rm과 "-delete"의 차이점은 무엇입니까? [복사]

find에서 rm과 "-delete"의 차이점은 무엇입니까? [복사]

/tmp이 파일 아래에서 100분보다 오래된 파일을 삭제하려고 합니다 .

차이점이 뭐야:

find /tmp -type f -mmin +100 -exec rm {} \;

그리고:

find /tmp -type f -mmin +100 -exec -delete 

두번째- 일부 추가가 가능한가요?인쇄/에코삭제하는 모든 파일을 인쇄하도록 명령에서?

/tmp/hadoop-unjar7118762490947462979/META-INF/NOTICE was deleted !!!

답변1

파일을 삭제하는 동안 파일을 인쇄하는 두 가지 대안을 생각했습니다.

find /tmp -type f -mmin +100 -printf '%p was deleted!!\n' -delete

또는

find /tmp -type f -mmin +100 -exec rm -v {} \;

전자는 find파일을 삭제하기 전에 GNU에게 파일 이름(전체 경로)을 인쇄하도록 지시하고, 후자는 find각 파일 이름에 대해 실행하도록 지시하며, 이는 (GNU)에게 수행 중인 작업을 자세히 설명하도록 지시합니다.rm -v-vrm

전자의 출력은 다음과 같습니다.

/tmp/.sh_history.6668 was deleted!!
/tmp/krb5cc_6094 was deleted!!
/tmp/.sh_history.18394 was deleted!!

그리고 후자의 출력은 다음과 같습니다:

removed ‘/tmp/.sh_history.6668’
removed ‘/tmp/krb5cc_6094’
removed ‘/tmp/.sh_history.18394’

-exec rm {}vs에서 주목해야 할 또 다른 점 은 $PATH를 동안 검색 -delete한다는 것입니다 .-exec rmrm-delete 링크를 직접 취소하세요.문서. 일반적으로 문제는 아니지만 주의해야 할 사항이 있습니다.

예:

$ pwd
/tmp/jeff
$ ls
bar  foo  rm
$ cat rm
#!/bin/sh
echo Hi, I am the fake rm: "$@"
$ PATH=/tmp/jeff:$PATH
$ find . -type f -exec rm {} \;
Hi, I am the fake rm: ./rm
Hi, I am the fake rm: ./bar
Hi, I am the fake rm: ./foo

-delete를 사용하면 find기본적으로 깊이 우선 방식으로 검색 경로도 탐색됩니다. 이를 통해 나중에 입력하지 않을 디렉토리를 삭제할 수 있습니다. 디렉토리에서 사용하는 경우 findwith를 사용해야 합니다. 그렇지 않으면 존재한다고 생각하는 디렉토리를 찾을 수 없다고 불평하게 됩니다.-depth-exec rm -rf {}find

관련 정보