在 Linux 上,是否有可能找到所有包含的文件和目录(以及子目录的文件等)都超过给定年龄的目录?换句话说,如果目录中有一个或多个文件的修改日期晚于给定的阈值,则该目录不应该被列出。如果全部该目录下的文件和文件夹包括较旧大于给定的阈值,则该目录应该被列出。
用例是我的主目录中充满了隐藏目录,我确信其中许多是以前安装的遗留目录,以及我多年未使用的软件。我希望能够找到这些目录,这样我就可以轻松决定是否要剔除它们。
答案1
可能无需使用进程替换或其他方式创建文件就可以做到这一点,但这是一个快速而肮脏的解决方案:
find . -type f -mtime +30 -printf '%h\n' | sort | uniq > old.txt
find . -type f -mtime -30 -printf '%h\n' | sort | uniq > new.txt
grep -vf new.txt old.txt
第一个命令输出 30 天前修改过的每个文件的路径(在 find 中-printf
- 至少在我的系统上使用 GNU find -%h
打印除实际文件名之外的完整路径),然后对它们进行排序并删除任何重复项,并将整个内容放入名为 的文件中old.txt
。
第二条命令执行相同的操作,但针对的是 30 天内修改的每个文件,并将它们放入另一个文件中new.txt
。
grep 行打印 old.txt 中未出现在 new.txt 中的每一行——因此它将为您提供包含以下内容的目录列表仅有的最后修改时间超过 30 天的文件。
这些都是使用 GNU 版本的实用程序。我不知道语法是否与 BSD 版本匹配,等等。
答案2
最终想出了神奇的一句话:
for dir in `find . -type d -mtime +30`; do test `find $dir -type f -mtime -30 -print -quit` || echo $dir; done
这将打印修改时间超过 30 天且在过去 30 天内没有修改文件的所有目录。
答案3
这个应该可以工作:
for DIR in {the folder list}; do
if [[ $(find ${DIR} -mtime -10 -type f) == "" ]]; then
echo ${DIR}
fi
done
它会在{文件夹列表}中查找包含超过 10 天的文件的所有目录。
基本上,它find ${DIR} -mtime -10 -type f
的作用是查找-type f
10 天内修改过的所有文件() ,这与或-mtime -10
不同,有关更多信息,请参见此处:-atime
-ctime
http://www.cyberciti.biz/faq/howto-finding-files-by-date/)。如果在目录中找不到这样的文件,那么我们就知道这个目录已经超过10天了,我们用 输出这个目录echo ${DIR}
。
希望能帮助到你!
答案4
您可以使用以下解决方法来实现您的需求:
$ touch -t 201206010100 some_file
$ find . -newer some_file
在触摸手册页:
-t STAMP
use [[CC]YY]MMDDhhmm[.ss] instead of current time
touch 还有一个 -d 选项,不过我还没用过,你可以试试。
[编辑] 您可以按如下方式使用 touch -d 选项在给定日期生成文件:
$ touch -d "Wed Jun 27 09:44:44 EEST 2012" some_file
$ ls -l some_file
-rw-r--r-- 1 user user 0 2012-06-27 09:44 some_file
你可以使用我上面提到的相同方法