nau*_*101 9 linux find directory-listing
是否可以在 linux 上找到所有包含的文件和目录(以及子目录的文件等)都早于给定年龄的目录?换句话说,如果目录中有一个或多个文件的修改日期比给定阈值更近,则不应列出该目录。如果该目录下的所有文件和文件夹都早于给定阈值,则应列出该目录。
用例是我的主目录充满了隐藏目录,我确信其中许多是以前安装和我多年未使用的软件遗留下来的。我希望能够找到这些目录,以便我可以轻松决定是否剔除它们。
可能可以在不使用进程替换或其他方法创建文件的情况下执行此操作,但这是一个快速而肮脏的解决方案:
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
Run Code Online (Sandbox Code Playgroud)
第一个命令输出 30 多天前修改过的每个文件的路径(在 find 中-printf
——至少在我系统上的 GNU find 中——%h
打印除了实际文件名之外的整个路径),然后对它们进行排序并去掉任何复制,并将整个内容放入名为old.txt
.
第二个命令执行相同的操作,但每个文件都修改了不到 30 天,并将它们放入另一个文件new.txt
.
grep 行打印 old.txt 中没有出现在 new.txt 中的每一行——所以它会给你一个目录列表,这些目录只包含30 多天前最后修改的文件。
这都是使用 GNU 版本的实用程序。我不知道语法是否与 BSD 版本等匹配。
终于想通了神奇的单线:
for dir in `find . -type d -mtime +30`; do test `find $dir -type f -mtime -30 -print -quit` || echo $dir; done
Run Code Online (Sandbox Code Playgroud)
这将打印修改时间超过 30 天且在过去 30 天内没有修改任何文件的任何目录。
归档时间: |
|
查看次数: |
14465 次 |
最近记录: |