디렉토리에 N개 이상의 파일이 있는 경우 디렉토리에서 가장 오래된 파일을 삭제하는 bash 스크립트를 어떻게 작성할 수 있습니까? [복사]

디렉토리에 N개 이상의 파일이 있는 경우 디렉토리에서 가장 오래된 파일을 삭제하는 bash 스크립트를 어떻게 작성할 수 있습니까? [복사]

스크립트 작성 방법이 궁금합니다.

디렉터리에 있는 파일 수를 계산합니다.

이 숫자가 지정된 숫자 N보다 크면 디렉토리에서 가장 오래된 파일이 삭제됩니다.

추가적인 호의를 얻으려면 개수/제거에 .zip 파일만 포함하세요.

답변1

예를 들어, 폴더에 50개가 넘는 파일이 있는 경우에만 작업을 수행하려면 다음을 수행하세요.

shopt -s dotglob nullglob
for file in *; do
    [[ -f $file ]] && files+=( "$file" )
done
if (( ${#files[@]} > 50 )); then
    IFS= read -r -d $'\0' line < <(find . -maxdepth 1 -type f -printf '%T@ %p\0' 2>/dev/null | sort -z -n)
    rm "${line#* }"
fi

답변2

N=50
[[ $( ls | wc -l ) -gt $N ]] && ls -tr | tail -n1 | tr \\n \\0 | xargs -0 echo rm

거의 테스트되지 않았지만 이것이 가깝다고 생각합니다. 텍스트 출력이 만족스러우면 이를 제거 echo하고 활성화되도록 설정할 수 있습니다.

  • ls파일 나열
  • wc세어보세요
  • [[ ... -gt ... ]]만약에
  • &&그 다음에
  • ls -tr연령 역순으로 파일 나열
  • tail -n1마지막 행만 표시( 1필요에 따라 교체)
  • tr \\n \\0파일 이름 사이에 \0구분 기호 설정(여기서는 하나만)
  • xargs -0 echo rm --\0발견된 각 인수(s로 구분)를 다음에 추가합니다.echo rm --
  • echo rm --결과가 실제로 원하는 결과인지 확인할 수 있는 기회 제공
  • rm --파일 삭제( --로 시작하는 파일 이름을 처리하려면 파일 이름 앞에 넣음 -)

관련 정보