根据创建日期返回文件列表

时间:2016-08-17 17:03:54

标签: shell command-line sh

我刚开始使用bourne shell脚本并尝试编写一个脚本,该脚本将包含两个命令行参数:目录和文件。我想比较文件的创建日期和目录中的文件,并打印所有旧文件,然后打印所有较新文件的计数。

这是我到目前为止尝试过的代码,但我知道它无法正确识别目录。

#!/bin/sh

directory=$1
file=$2
x=0

for f in $directory
do 
  if [ $f -ot $file ]
  then
    echo "$f"
    x='expr $x+1'
  fi
done

echo "There are $x newer files"

任何提示都将非常感谢! 感谢

1 个答案:

答案 0 :(得分:1)

find命令提供了根据时间戳搜索文件的选项。您想要实现的目标可以在不使用循环的情况下完成:

# Search for files with modification time newer than that of $file
find $directory -newermm $file

# Search for files with modification time older than that of $file
find $directory ! -newermm $file

请参阅https://www.gnu.org/software/findutils/manual/html_node/find_html/Comparing-Timestamps.html了解详情。

但是,如果您正在学习shell脚本并希望编写自己的脚本,请参考以下建议:

  1. 要迭代目录中的文件,您可以使用:

    for f in "$directory"/*
    
  2. 据我所知,-ot比较修改时间(而不是创建时间)。就此而言,我怀疑Linux是否提供了文件的创建时间。

  3. 增加x(较新文件的数量)应该在else子句中完成。我更喜欢x=$((x+1)),这在所有符合POSIX标准的shell中都受支持。

  4. 警告:使用"$directory/*进行迭代不会递归到子目录中。除非您指定find选项,否则-maxdepth将递归到子目录。