搜索最新文件并查看文件是否早于“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

相关内容