find /home/ -mtime +25 -exec rm -rf {} \; 2> /dev/null
위 명령의 출력은 무엇이며 어떻게 작동합니까?
-exec
{}
\;
명령 내용
답변1
문제의 명령이 다음을 발견했습니다.이름(파일, 디렉터리 또는 기타) /home
( /home
자체 포함)이 최소 25일 전에 수정된 이름을 삭제합니다. 이름이 디렉터리를 참조하는 경우 전체 디렉터리 트리가 삭제됩니다.
관련된 명령은 표준 출력에 기록되지 않으며 진단 메시지는 로 리디렉션됩니다 /dev/null
. find
유틸리티가 삭제된 디렉토리를 처리하려고 하면 보이지 않는 오류 메시지가 생성될 수 있습니다. 이를 사용하면 -depth
디렉터리 트리가 하향식이 아닌 상향식으로 처리됩니다.
-exec
find
외부 명령을 호출하는 데 사용됩니다 . {}
찾은 이름으로 대체되며 외부 \;
명령의 끝을 나타냅니다.
이 명령은 또한재귀적으로 일치 및 /home
삭제, 충분히 오래 되었다면. 디렉터리의 수정 타임스탬프는 파일이나 디렉터리만 업데이트합니다.곧디렉터리 아래의 파일은 추가되거나 제거되므로 지난 25일 이내에 해당 작업을 수행하지 않은 경우 이 명령이 /home
해당 내용을 모두 삭제할 것으로 예상됩니다(루트 권한으로 실행하는 경우).
하위 디렉터리에 파일을 추가하거나 제거해도 /home
타임스탬프가 업데이트되지 않습니다 /home
.
루트가 아닌 권한으로 실행하는 경우 /home
현재 사용자에게 속한 모든 파일, 디렉터리 등은 /home
해당 사용자 또는 해당 상위 디렉터리(예:)가 충분히 오래된 경우 삭제됩니다.
그냥 삭제하고 싶으시다면일반 파일, 그럼 제안하겠습니다
find /home -type f -mtime +25 -exec rm -f {} +
이 -type f
테스트는 일반 파일만 통과하도록 허용합니다. -exec ... {} +
대신 사용하면 -exec ... {} \;
가능한 한 적은 수의 호출이 발생한다는 의미입니다 rm
(몇 가지 이름이 수집되어 에 전달됩니다 {}
).
또는 귀하가 find
지원하는 경우 -delete
:
find /home -type f -mtime +25 -delete
제거된 내용을 보려면 -print
앞 -exec
(또는 앞에 -delete
)을 삽입하세요. 삭제할 때마다 대화형으로 메시지를 표시하려면 -ok
대신 사용하세요 -exec
. 이 경우에는 를 사용하지 말고 -delete
표준 오류를 로 리디렉션하지 마세요 /dev/null
.
답변2
이것은 발견된 패턴에 대해 수행되는 작업입니다.
/home에서 mtime이 25일보다 오래된 모든 파일을 찾은 다음 삭제합니다.
mtime은 24시간 전에 수정된 시간으로, number*24시간입니다.
- 발견된 패턴을 나타내는 {}에서 명령을 실행합니다. & \는 명령 태그의 끝입니다.