我正在尝试编写一个脚本,该脚本将递归搜索目录的子目录并执行以下操作:
- 在该子目录中查找最新的文件
- 查找最近文件的日期
- 检查该文件是否早于 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