很抱歉,如果这是一个简单的问题,但我是Bash脚本的新手,我的Google技能让我失望。我正在尝试编写一个脚本,最终将检查目录中每个文件的上次修改时间,以及上次修改文件的时间> 3天前,然后用gzip压缩文件。我现在可以用我的脚本打印出上次修改时间:
1 !#/bin/bash
2 echo "Enter directory"
3
4 read directory
5
6 for entry in "$directory"/*
7 do
8 stat -f "%Sm" "$entry"
9 done
这打印出时间就好了:
Randalls-MacBook-Pro:bash_scripts randallbanks$ ./print_last_modified.sh
./print_last_modified.sh: line 1: !#/bin/bash: No such file or directory
Enter directory
..
Apr 6 13:12:21 2015
Apr 19 18:50:26 2015
Apr 14 11:29:06 2015
Apr 7 12:26:37 2015
Apr 15 16:05:17 2015
Apr 6 16:28:06 2015
Apr 6 12:28:40 2015
Apr 6 12:28:40 2015
Apr 6 12:28:40 2015
Apr 6 12:28:40 2015
Apr 23 17:03:03 2015
但是我弄清楚的是如何以这样的方式存储或解析这些内容,以便我可以检查它们的上次修改时间是否为> 3天前。我怎么能这样做呢?
编辑:红利问题:它显然没有在标题中识别我的shebang是什么?
答案 0 :(得分:1)
要修改3天或更久前修改过的文件,请使用:
find "$directory" -mtime +2 -type f -exec gzip {} \;
如果您的find
足够现代,请使用:
find "$directory" -mtime +2 -type f -exec gzip {} +
find "$directory"
这将启动find
在$directory
下的目录树中查找文件。
-mtime +2
这会查找修改时间超过2天的文件。 (超过2意味着三个或更多)。有关man find
如何计算年龄四舍五入到天的详细信息,请参阅find
。
-type f
这会限制find
寻找常规文件。
-exec gzip {} \;
这会告诉find
gzip
找到的文件。
答案 1 :(得分:1)
你的shebang是一个bangshe。它应该是permission denied
;它是#!
。
OS X上的!#
命令(通常是BSD)可以执行您要查找的内容。 find
根据字符串中指定的时间检查修改时间,包括-newermt
等字符串。
所以:
"3 days ago"