很抱歉,如果这是一个简单的问题,但我刚刚开始使用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天前。我该怎么做呢?
编辑:额外的问题:它是怎么回事,显然没有认出我的头?
发布于 2015-04-24 00:18:27
若要上一次修改3天或更多天前的gzip文件,请使用:
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。发布于 2015-04-24 00:19:17
你的“砰”是一声巨响。它应该是#!;它是!#。
OS上的find命令(通常是BSD)可以执行您想要的操作。-newermt根据字符串中指定的时间检查修改时间,包括"3 days ago"这样的字符串。
所以:
find . -not -newermt "3 days ago" -exec gzip {} \;https://stackoverflow.com/questions/29836527
复制相似问题