用于检查子目录的 Shell 脚本

用于检查子目录的 Shell 脚本

A. 我使用以下代码获取文件的修改日期。但这也会选择子目录,因此返回错误。我该如何修复此问题?

for file in $1/*; do
        echo `stat -c %y $file | cut -d ' ' -f1`
done

$1是我正在传递的目录。

B. 还有什么办法可以做到这一点。我需要传递目录和日期范围作为命令行参数,并列出位于此日期范围内的文件和修改日期。

例如,output.sh /home/user/desktop 2014-10-07 2014-11-17应列出此目录中在此时间间隔内修改的所有文件。

答案1

关于你问题的 A 部分,这里有参考进行标准文件测试。

具体来说,您可以做的是:

for file in $1/*; do
    [ ! -d "$file" ] && echo `stat -c %y $file | cut -d ' ' -f1`
done

至于 B 部分,请参阅stackoverflow 问题。

答案2

对于 A 部分,更有效的方法:

find $1 -maxdepth 1 ! -type d -exec stat -c "%y" {} + | cut -d' ' -f1

find非常适合根据类型进行过滤,并且exec应该+运行更少的stat进程。将整个输出传输到cut意味着我们只需运行cut一次。而且真的没有必要这样做

echo `some command`

唯一的好处是将多行输出转换为单行,但无论如何这并不适用于您的情况。

相关内容