电脑技术学习

使用 UNIX find 命令的高级技术

dn001

  清单 3. less 命令

$ find $HOME/. -name *.txt -exec head -n 1 -v {} ; > report.txt
$ less < report.txt

  维护 LOG 和 TMP 文件的存储空间

  要为生成大量文件的应用程序维护 LOG 和 TMP 文件存储空间,可以将下列命令放入到每天运行的 cron 任务中:

  清单 4. 维护 LOG 和 TMP 文件存储空间

$ find $LOGDIR -type d -mtime +0 -exec compress -r {} ;
$ find $LOGDIR -type d -mtime +5 -exec rm -f {} ;

  第一个命令找到 $LOGDIR 目录中所有包含在 24 小时内 (-mtime +0) 进行了修改的数据的目录 (-type d),并对它们进行压缩 (compress -r {}) 以节省磁盘空间。如果这些目录超过了一个工作周 (-mtime +5),第二个命令则将其删除 (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,这样可以轻松地浏览和管理文件系统,并且充满乐趣。

标签: