모든 파일을 삭제하고 최신 파일만 유지하는 스크립트

모든 파일을 삭제하고 최신 파일만 유지하는 스크립트

모든 파일을 삭제하고 각 하위 디렉터리(특정 디렉터리에서 시작)의 최신 파일만 유지하는 방법에 대한 제안 사항이 있습니까? 내가 시도한 것은 다음과 같습니다.

#!/bin/bash

find /home/ftp/ -type f | while IFS= read -r line
do
  find "$line" -type f | head -n -1 | while read file
  do
    #rm -f "$file"
    echo "$file"
  done
done

/home/ftp/upload 및 /home/ftp/download에 2개의 하위 디렉터리가 있습니다. 두 개의 하위 디렉터리에는 각각 2개의 파일이 있습니다.

위 스크립트를 테스트할 때 파일 이름이 에코되지 않습니다.

답변1

zsh현재 디렉토리에서 를 사용하십시오 .

for dir (**/*(N/)) {
  files=($dir/*(N.om))
  (($#files > 1)) && echo rm -f -- $files[2,-1]
}

숨겨진 디렉터리와 파일을 고려하려면 Dglob 한정자를 추가하세요.

그럼 그냥 고려해봐정기적인문서. 장치, 소켓, 명명된 파이프와 같은 다른 유형의 파일을 원하거나 기호 링크를 따르려는 경우 더 많은 glob 한정자를 사용하여 조정할 수 있습니다.

echo실제로 작업을 수행하려면 제거하세요 .

최신 GNU 도구와 POSIX 셸을 사용하세요.

(export LC_ALL=C
find . -type f -printf '%T@\t%p\0' |
  sort -rzn |
  cut -zf2- |
  gawk -v RS='\0' -v ORS='\0' '
    match($0,/.*\//) && n[substr($0,1,RLENGTH-1)]++' |
  xargs -r0 echo rm -f
)

관련 정보