Linux는 날짜별로 기본 경로의 파일을 찾아 삭제합니다.

Linux는 날짜별로 기본 경로의 파일을 찾아 삭제합니다.

내 홈 디렉터리에서 많은 출력 파일(로그, 오류, 경고 등)을 생성하는 일부 프로세스를 실행합니다. 특정 날짜(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하거나 지원하는 이러한 파일을 삭제하려는 경우 대부분이 이를 지원합니다 .-deletefind-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'])

¹ 파일은 줄 바꿈으로 구분되어 있고 줄 바꿈은 파일 이름의 모든 문자만큼 유효하기 때문입니다. 자세한 내용은 다음을 방문하세요.찾기 결과를 반복하는 것이 왜 나쁜 습관입니까?

관련 정보