我刚开始使用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"
任何提示都将非常感谢! 感谢
答案 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脚本并希望编写自己的脚本,请参考以下建议:
要迭代目录中的文件,您可以使用:
for f in "$directory"/*
据我所知,-ot
比较修改时间(而不是创建时间)。就此而言,我怀疑Linux是否提供了文件的创建时间。
增加x
(较新文件的数量)应该在else
子句中完成。我更喜欢x=$((x+1))
,这在所有符合POSIX标准的shell中都受支持。
警告:使用"$directory/*
进行迭代不会递归到子目录中。除非您指定find
选项,否则-maxdepth
将递归到子目录。