내 홈 디렉터리에서 많은 출력 파일(로그, 오류, 경고 등)을 생성하는 일부 프로세스를 실행합니다. 특정 날짜(2021년 9월 17일이라고 가정)에 생성된 출력 파일을 찾기 위해 다음 명령을 시도했습니다.
find . -type f -newermt 2021-09-17
2021년 9월 17일에 수정된 모든 파일을 찾을 수 있습니다.여기, 실제로 작동합니다. 그러나 이 명령은 출력 파일뿐만 아니라 , 및 와 .history
같은 홈 디렉터리의 일부 숨겨진 파일도 반환합니다 ..viminfo
.cache
이제 내가 찾은 모든 파일을 삭제하려고 하면
find . -type f -newermt 2021-09-17 | xargs rm -f
숨겨진 파일도 치명적으로 삭제되나요? 대답이 '예'인 경우 숨김 파일은 유지되고 출력 파일만 삭제되도록 어떻게 변경해야 합니까?
답변1
find . -type f -newermt 2021-09-17
한 줄에 하나씩 인쇄하세요.정기적인( f
유형) 현재 디렉토리 또는 마지막 m
수정 시간이 현지 시간 newer
보다 2021-09-17T00:00:00.000000000
짧은 하위 디렉토리의 모든 수준에 있는 파일입니다(단, 심볼릭 링크를 따르지 않음). t
여기에는 해당 날짜에 마지막으로 수정된 파일과 나중에 수정된 파일(향후 수정된 파일 포함)이 포함됩니다.
이 출력은 안정적으로 사후 처리될 수 없습니다. 일부 구현 -exec rm -f {} +
에서 사용 find
하거나 지원하는 이러한 파일을 삭제하려는 경우 대부분이 이를 지원합니다 .-delete
find
-newermt
그러나 무슨 일이 있어도 프로필, 문서, 사진 등을 포함하여 삭제할 수 있는 모든 파일과 숨겨진 파일 또는 숨겨진 디렉터리의 파일이 삭제됩니다.
숨겨진 파일(예: 숨겨진 디렉터리의 파일 포함)을 제외하고 해당 날짜에 마지막으로 수정된 파일만 삭제하려면 ~/.config
(나중은 삭제하지 않음) 다음을 수행해야 합니다.
LC_ALL=C find . -name '.?*' -prune -o \
-type f -newermt 2021-09-17 ! -newermt 2021-09-18 -exec rm -f {} +
와 호환되지 않기 때문에 (즉 , ) -delete
거기에서 사용할 수 없습니다 .-delete
-depth
-prune
그러나 그럼에도 불구하고 나는 그것을 당신의 홈 디렉토리에서 맹목적으로 실행하지 않을 것입니다.
하위 디렉터리의 파일을 삭제하지 않고 현재 디렉터리의 파일만 삭제하려면 다음을 수행할 수 있습니다.
LC_ALL=C find . -maxdepth 1 ! -name '.*' \
-newermt 2021-09-17 ! -newermt 2021-09-18 -type f -delete
zsh
셸을 사용하는 경우 다음을 수행할 수도 있습니다.
autoload age
rm -f -- *(.e['age 2021-09-17'])
zsh globs는 .NET Framework와 달리 기본적으로 숨겨진 파일을 건너뜁니다 find
.
또는 재귀적으로(숨겨진 파일과 디렉터리는 건너뛰고):
rm -f -- **/*(.e['age 2021-09-17'])
¹ 파일은 줄 바꿈으로 구분되어 있고 줄 바꿈은 파일 이름의 모든 문자만큼 유효하기 때문입니다. 자세한 내용은 다음을 방문하세요.찾기 결과를 반복하는 것이 왜 나쁜 습관입니까?