디렉토리에서 가장 오래된 파일 삭제

디렉토리에서 가장 오래된 파일 삭제

mv 시스템 명령을 실행하려고 하는 다운로더가 Perl로 실행 중입니다.

MV 출력

mv: cannot move `./PMC5318673/EXCLI-15-758.pdf' to `/directory/EXCLI-15-758.pdf': No space left on device

드라이브에 공간이 있지만 폴더가 해당 inode를 모두 사용한 것 같습니다.

그래서 우리가 생각해낸 해결책은 디렉토리에서 가장 오래된 파일을 삭제하고 그 파일을 그곳으로 옮기고, mv할 공간이 아직 없으면 다음으로 가장 오래된 파일을 삭제하는 것이었습니다.

빠르게 실행되는 시스템 명령이 필요합니다. (파일이 수백만 개 이상 있어서 시간이 오래 걸리나요?) 가장 오래된 파일은 삭제할 수 있습니다. 또한 이러한 파일은 하위 폴더에 있는 경우도 있습니다.

또한, 가장 오래된 파일을 삭제하는 것 외에 다른 방법이 생각나시면 알려주세요.

답변1

zsh에서:

rm -- **/*(.om[-1])

(또는 다른 쉘에서 zsh -c 'rm -- **/*(.om[-1])':)

의미는 다음과 같습니다

  1. **/* 재귀적으로 파일 수집

  2. ( ... ) 는zsh 전역 한정자

  3. ."일반" 파일(디렉토리 등은 제외)만 고려됨을 의미합니다.

  4. om수정 시간별 정렬을 나타냅니다.

  5. -1가장 오래된 파일만 선택되었음을 나타냅니다.

~에 귀속됨Gilles의 답변에서 영감을 얻으십시오.

답변2

가장 오래된 파일 삭제

find . -name '*some-pattern*' -type f -printf '%T+ %p\n' | sort | head -n1 | awk '{print $2}' | xargs rm -v

여기서 목적은 -name '*some_pattern*'삭제하려는 파일로만 일치를 제한하는 것입니다.

답변3

어떤 분께서 이 질문에 답변을 하신 후 삭제하셨는데, 저는 그 분들이 주신 답변을 그대로 활용했습니다.

find /path -mtime +1000 -exec rm -rf {} \;

이렇게 하면 1000일이 지난 파일이 삭제됩니다.

관련 정보