디렉토리의 하위 디렉토리를 재귀적으로 검색하고 다음을 수행하는 스크립트를 작성하려고 합니다.
- 이 하위 디렉터리에서 최신 파일을 찾으세요.
- 가장 최근 파일의 날짜 찾기
- 파일이 X일보다 오래되었는지 확인하세요(예: (180)).
- 파일이 X일보다 오래된 경우 해당 경로를 "OLD.txt"라는 파일로 출력합니다.
- 파일이 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