최신 파일을 검색하고 파일이 "X" 날짜보다 오래된지 확인하세요.

최신 파일을 검색하고 파일이 "X" 날짜보다 오래된지 확인하세요.

디렉토리의 하위 디렉토리를 재귀적으로 검색하고 다음을 수행하는 스크립트를 작성하려고 합니다.

  1. 이 하위 디렉터리에서 최신 파일을 찾으세요.
  2. 가장 최근 파일의 날짜 찾기
  3. 파일이 X일보다 오래되었는지 확인하세요(예: (180)).
  4. 파일이 X일보다 오래된 경우 해당 경로를 "OLD.txt"라는 파일로 출력합니다.
  5. 파일이 X일보다 오래되지 않은 경우 해당 경로를 "YOUNG.txt"라는 파일로 출력합니다.

지금은 그게 전부입니다. find 명령을 통해 파일에서 날짜를 가져오고 if/then 비교를 수행하는 방법을 잘 모르겠습니다.

#!/bin/bash
for d in /u1/?/*/Maildir/new ;
do FILE=$(find "$d" -printf '%T+ %p\n' | sort -r | head >> Test.txt)
done

유사한 코드에 대한 다른 시도:

#!/bin/bash
echo "Find files older & younger than X days"
echo "Type the number of X days and hit 'Enter':"
read PERIOD
for d in /u1/?/*/Maildir/new ;
do FILE=$(find "$d" -type f -mtime +$PERIOD -exec ls {} \; >> OLDER.txt)
done
for d in /u1/?/*/Maildir/new ;
do FILE=$(find "$d" -type f -mtime -$PERIOD -exec ls {} \; >> YOUNGER.txt)
done
echo "COMPLETE!"
echo "Check 'OLDER.txt' and 'YOUNGER.txt' files in current directory for output"

마지막 파일의 문제점은 모든 파일을 출력한다는 것입니다. 반면 디렉터리에서 최신 파일만 찾고 최신 파일이 X일보다 오래되지 않았는지 확인하면 됩니다.

답변1

bash최고의 케이스는 아닙니다.

그리고 zsh:

#! /bin/zsh -
period=${1?Period not given}
for d (/u1/?/*/Maildir/new) {
  newest=($d/*(DN.om[1]))
  (($#newest)) || continue

  over=($newest(Nm+$period))
  if (($#over)); then
    ls -ld $newest >> OLDER.txt
  else
    ls -ld $newest >> YOUNGER.txt
  fi
}

답변2

이것은 bash버전입니다.

#!/bin/bash
maildir='/u1/?/*/Maildir/new'
DAYS_OLD=180

for d in $maildir ; do
    if [ -d "$d" ] ; then
        FILE="$d/"$(ls "$d" -t1  | head -n 1)
        echo $FILE
        if test $(find "$FILE" -mtime +$DAYS_OLD) ; then
            echo $FILE >> OLDER.txt
        else
            echo $FILE >> YOUNGER.txt
        fi
    fi
done

관련 정보