스크립트 작성 방법이 궁금합니다.
디렉터리에 있는 파일 수를 계산합니다.
이 숫자가 지정된 숫자 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 --
파일 삭제(--
로 시작하는 파일 이름을 처리하려면 파일 이름 앞에 넣음-
)