$ find $LOGDIR -type d -mtime5 -exec rm -f {} ;
第一个命令找到 $LOGDIR 目录中所有包含在 24 小时内 (-mtime0) 进行了修改的数据的目录 (-type d),并对它们进行压缩 (compress -r {}) 以节省磁盘空间 。如果这些目录超过了一个工作周 (-mtime5),第二个命令则将其删除 (rm -f {}),以便增加磁盘上的可用空间 。通过这种方式,cron 任务自动地根据您所指定的时间窗口对目录进行维护 。
复制复杂的目录树
如果您想要将复杂的目录树从一台计算机复制到另一台计算机,同时保持副本权限以及 User ID 和 Group ID(UID 和 GID——操作系统所使用的标记文件的所有权的数值),并且不复制用户文件,那么就需要再次使用 find 和 cpio:
清单 5. 复制复杂的目录树
$ cd /source/Directory
$ find . -depth -print | cpio -o -O /target/directory
查找不指向任何地方的链接
要查找不指向任何地方的链接,可以使用带 find 的 perl 解释器,如下所示:
$ find / -type l -print | perl -nle '-e || print';
该命令从最顶层目录 (/) 开始,列出由 perl 解释器确定不指向任何地方 (-nle '-e || print') 的所有链接 (-type l -print),关于 Unix Guru Universe 站点中这个技巧的更详细的信息,请参阅参考资料部分 。如果您想要删除这些文件,可以进一步使用管道将输出传递到 rm -f {} 命令 。当然,Perl 可以在大多数的 UNIX 工具包中找到,它是许多功能强大的解释性语言工具中的一种 。
定位和重命名无法打印的目录
在 UNIX 中,可能会有错误的或恶意的程序创建包含无法打印的字符的目录 。定位和重命名这些目录,这样就可以更容易地检查并删除它们 。要完成该操作,您首先需要在 ls 中包含 -i 开关,以获取该目录的索引节点的数值 。然后,使用 find 将索引节点的数值转换为一个可以使用 mv 命令进行重命名的文件名:
清单 6. 定位和重命名无法打印的目录
$ ls -ail
$ find . -inum 211028 -exec mv {} newname.dir ;
列出长度为零的文件
要列出所有长度为零的文件,请使用下面的命令:
$ find . -empty -exec ls {} ;
在查找到空文件之后,您可以选择用 rm 命令来代替 ls 命令,以删除这些文件 。
很明显,您对 UNIX find 命令的使用受到知识和创造性的限制 。
结束语
使用 find 命令,可以轻松地浏览 UNIX 文件系统中丰富的内容 。很值得花时间来试验该命令,并了解它能为您做些什么 。正如本文中所列出的示例,您可以通过许多创造性的方式来使用 find,这样可以轻松地浏览和管理文件系统,并且充满乐趣 。
推荐阅读
- 对话 UNIX: 更多 shell 脚本技术
- 使用6681一个月之后的感受
- 对话 UNIX: !$#@*%
- UNIX 共享内存应用中的问题及解决方法
- 用Syslog 记录UNIX和Windows日志的方法
- 本周五Unix系统将发生时间错误
- 如何在Unix结果中抽取想要的参数
- 什么叫验方
- LG660两周使用手记
- 同步 UNIX 文件
