- 浏览: 163032 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
saintwe:
我现在有个论坛是:www.xxx.com/bbs 是PHP的开 ...
Apache VirtualHost的用法 -
liubang201010:
Jprobe最新版本下载:
http://www.innov ...
Jprobe 下载 -
liubang201010:
Jprobe最新版本 v8.3下载:
http://www.i ...
Jprobe 下载 -
cl1154781231:
native2ascii -reverse -encoding ...
中文编码转Unicode -
wmlJava:
java_2008_4_4 写道这么一个需求:同一台服务器上有 ...
Apache VirtualHost的用法
本文介绍如何使用find
命令浏览 UNIX® 文件系统中丰富的内容。find
命令是 UNIX 程序员的技能中功能最强大和最有用的命令之一。各种版本的 UNIX 都具有可以包含数以千计的不同类型文件的文件系统。有了如此之多的选择,要定位一个特定文件或文件集,将变得非常困难。而find
命令能通过许多方式,让这项任务变得更加轻松。
没有什么能比得上探索和发现新的人、地方、事物所带来的刺激。领域可能有所不同,但有些原则却是一样的。在这些原则中,有一条是记录下您的旅程,另一条则是了解和使用工具。
UNIX® 操作系统很像一片广阔的、未经标识的荒野。当您在这样的领域中旅行时,可以选择一些日后能够给您带来帮助的工具。find
命令便是这样一种工具。find
命令不仅能够简单地用来定位文件,正如本文将介绍的那样,它还可以自动地执行其他 UNIX 命令的序列,其中使用所查找到的文件名作为输入。
所有称职的操作系统都具有协助您查找相关内容的工具。与大多数工具不同的是,UNIX 中的 find
命令可以自动地对其查找到的文件执行许多操作。
图形用户界面 (GUI) 中的标准 find
工具允许您对所查找到的文件进行一些常规操作任务:您可以将它们标记为剪切、复制和粘贴,您可以将它们移动到一个新的位置,并且可以使用创建它们的应用程序来打开它们。这些操作涉及到两个或更多的步骤,并且不是自动完成的,即首先查找到文件,然后使用 GUI 为下一步的操作对它们进行标记。这种方法对许多用户来说没有问题,但是 Explorer 需要的不仅是这些。
UNIX 的 find
命令可以删除、复制、移动和执行其查找到的文件。另外,使用 -exec
参数可以根据您所需要的 UNIX 命令的序列来自动地运行这些文件。它甚至可以在对任何文件执行这些操作前,进一步让您进行确认。
与大多数 UNIX 命令一样,UNIX find
命令具有一长串令人生畏的选项和开关,它们会阻碍人们深入地学习该命令,但正是因为其范围广阔,真正的 Explorer 并不会被它们吓倒。一条好的通用原则在简化一个复杂问题时都会经过漫长的过程。启动一个 xterm,并尝试执行下面的命令:
$ find . -name *.gif -exec ls {} \; |
-exec
参数中包含了真正有价值的操作。当查找到匹配搜索条件的文件时,-exec
参数定义了将对这些文件进行什么操作。该示例告诉计算机进行如下操作:
- 从当前文件夹开始往下搜索,紧跟在
find
之后,使用点号 (.
)。 - 定位所有名称以 .gif 结尾的文件(图形文件)。
- 列出所有查找到的文件,使用
ls
命令。
需要对 -exec
参数进行更深入地研究。当查找到匹配搜索条件的文件名时,find
命令执行 ls {}
字符串,用文件名和路径代替文本 {}
。假设在搜索中查找到 saturn.gif 文件,find
将执行如下所示的命令:
$ ls ./gif_files/space/solar_system/saturn.gif |
本文余下的内容建立在这条一般原则之上:仔细地使用 find
命令可以让 UNIX 文件系统的管理工作变得更加容易。例如,如果您使用了 -fstype
参数,find
命令可以根据查找到的文件所处的文件系统的类型来对命令进行相应的处理。在 find
命令对查找到的文件执行相应命令前将对您进行提示,这通常是非常有用的,您可以使用 -ok
参数告诉它继续执行该操作,接下来我们将对其进行介绍。
-ok
是 -exec
参数的一个重要的替代项,它的行为和 -exec
一样,但它会提示您是否要对文件运行相应的命令。假设您想要删除 home 目录中的大部分 .txt 文件,但希望能够逐个文件地执行该操作。像 UNIX 中的 rm
命令那样的删除操作是很危险的,因为当使用像 find
这样的自动化处理方式来查找文件时,它可能一不小心会删除重要的文件,您也许希望在删除这些系统查找到的文件之前对其进行仔细检查。
下面的命令列出了您的 home 目录中所有的 .txt 文件。要删除这些文件,必须在 find
命令通过列出文件名提示您确认操作时输入 Y
或者 y
:
$ find $HOME/. -name *.txt -ok rm {} \; |
它列出了查找到的每个文件,并且系统将暂停以等待您输入 Y
或者 y
。如果您按下 Enter 键,系统将不会删除该文件。清单 1 显示了一些示例结果:
< rm ... /home/bill/./.kde/share/apps/karm/karmdata.txt > ? < rm ... /home/bill/./archives/LDDS.txt > ? < rm ... /home/bill/./www/txt/textfile1.txt > ? < rm ... /home/bill/./www/txt/faq.txt > ? < rm ... /home/bill/./www/programs/MIKE.txt > ? < rm ... /home/bill/./www/programs/EESTRING.txt > ? . . . |
系统将在每个问号之后暂停,在本示例中,每次都按下了 Enter 键以继续处理下一个文件。(没有删除任何文件。)-ok
参数允许您控制每个查找到的文件的自动化处理过程,这样就添加了一种避免自动删除文件的安全措施。
如果在使用 -ok
参数时涉及到过多的文件,那么一个好的方法是先运行带 -exec
的 find
命令以列出所有将要删除的文件,然后在经过检查确保其中不会删除重要的文件后,再次运行该命令,其中用 rm
代替 ls
。
-exec
和 -ok
都非常有用,您必须确定在当前情况下哪一个能够更好的工作。请记住,安全第一!
您可以使用 find
命令执行各种各样的任务。本部分内容提供了使用 find
命令来管理文件系统的几种方式的示例。
为了保持简单,这些示例都避免了使用涉及通过管道将一个命令的输出传递到另一个命令的 -exec
命令。然而,您完全可以根据自己需要在 find 命令的 -exec
子句中使用这样的命令。
您可以使用 find
命令来清除目录或子目录中在正常使用过程中生成的临时文件,这样可以节省磁盘空间。要实现该操作,请使用下面的命令:
$ find . \( -name a.out -o -name '*.o' -o -name 'core' \) -exec rm {} \; |
括号中的文件掩码 标识出了需要删除的文件类型,每个文件掩码的前面都有 -name
。该列表可以扩展为包括您需要清除的系统中的任何临时文件类型。在代码的编译和连接过程中,程序员及其工具会生成示例中的那些文件类型:a.out
、*.o
和 core
。其他的用户通常也会生成类似的临时文件,可以使用如 *.tmp
、*.junk
等文件掩码来对命令进行相应的编辑。您可能还发现将命令放入一个称作 clean
的脚本中非常有用,当需要清除一个目录中的内容的时候就可以执行该脚本。
find
命令允许您复制目录中的全部内容,同时保持每个文件和子目录的权限、时间和所有权。要完成该操作,需要组合使用 find
和 cpio
命令,如下所示:
$ cd /path/to/source/dir $ find . | cpio -pdumv /path/to/destination/dir |
cpio
命令是一个复制命令,它设计用来将文件复制到或复制出一个 cpio 或 tar 存档文件,并自动地保持文件和子目录的权限、时间和所有权。
有些人使用每个文本文件的第一行作为标题或者文件内容的描述。可以使用列出文件名和所有文本文件第一行内容的报表更方便地对大量的文本文件进行筛选。下面的命令在报表中列出了您的 home 目录中所有文本文件的第一行内容,便于进一步地根据需要使用 less
命令进行检查:
$ find $HOME/. -name *.txt -exec head -n 1 -v {} \; > report.txt $ less < report.txt |
要为生成大量文件的应用程序维护 LOG 和 TMP 文件存储空间,可以将下列命令放入到每天运行的 cron
任务中:
$ 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
:
$ 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
命令进行重命名的文件名:
$ ls -ail $ find . -inum 211028 -exec mv {} newname.dir \; |
要列出所有长度为零的文件,请使用下面的命令:
$ find . -empty -exec ls {} \; |
在查找到空文件之后,您可以选择用 rm
命令来代替 ls
命令,以删除这些文件。
很明显,您对 UNIX find
命令的使用受到知识和创造性的限制。
使用 find
命令,可以轻松地浏览 UNIX 文件系统中丰富的内容。很值得花时间来试验该命令,并了解它能为您做些什么。正如本文中所列出的示例,您可以通过许多创造性的方式来使用 find
,这样可以轻松地浏览和管理文件系统,并且充满乐趣。
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文
- 在 Commands Reference, Volume 2, find Command 中,可以学习关于
find
命令的更多内容,特别是对于 IBM® AIX® 环境。 - Unix Guru Universe (UGU) 站点为 UNIX 提供了极好的资源。
- 关于如何通过使用许多可用的选项来加速
find
命令的搜索的技巧,请阅读 UHACC -- Presentations:using find。 - Linux.com | CLI Magic:GNU find 描述了使用
find
命令的基本知识。注意:CLI 代表命令行接口 (Command Line Interface),与 GUI 相反! - Use free software within commercial UNIX (developerWorks, February 2006) 的作者指出了如何在不同的商业版本之间使用功能不同的 UNIX 命令,如
find
或tar
。阅读他所介绍的如何在您的商业 UNIX 版本上安装 GNU 工具以实现兼容性。 - 跟踪最新的 developerWorks 技术事件与网络广播。
讨论
- 参与 developerWorks 博客,从而参加到 developerWorks 社区中来。
Bill Zimmerly 是一位知识工程师和具有不同版本 UNIX 和 Microsoft® Windows® 专长的底层系统程序员,同时,他也是一位崇尚逻辑改变的自由思想者。Bill 还被认为是一个非理性的人。这里所说的非理性来自于,“理性的人让自己适应世界。非理性的人却试图让世界适应自己。因此所有的进步都依赖于那些非理性的人”(乔治·萧伯纳)。他的爱好是创建新的技术并撰写相关的文章。他住在 Missouri 的 Hillsboro 郊外,那里空气新鲜、景色怡人,并且到处都是上等的葡萄酒酿造厂。没有什么能比得上一边用水晶般透明的杯子喝着 Stone Hill Blush,一边撰写着关于 UNIX shell 脚本的文章。您可以通过 bill@zimmerly.com 与 Bill 联系。 |
发表评论
-
CVS做版本管理项目的目录结构
2008-09-15 09:54 1719目录结构是:/home/cvsroot ... -
Tomcat OutOfMemory Error: PermGen Space
2008-08-30 13:33 1656This FAQ applies to: 5.1 Using ... -
使用Apache 反向代理功能连接 Tomcat
2008-08-24 23:04 6046Apache HTTP server 和 Tomc ... -
Windows与Vmware下的Linux文件共享方式总结
2008-08-03 11:18 13211.利用Samba 这是我用得最多的方式 2.在Linux下 ... -
中文编码转Unicode
2008-08-03 11:16 2518格式 native2ascii 所要转码文件 转码后文 ... -
Java 编程技术中汉字问题的分析及解决
2008-08-03 11:15 1245Java 编程技术中汉字问题的分析及解决 ... -
EasyJWeb
2008-08-03 11:14 1051EasyJWeb是基于java技术,应用于WEB应用程 ... -
eclipse中中文乱码解决
2008-08-03 11:13 2269可依次选择"window">> ... -
JBoss启动时无法转换DailyRollingFileAppender类的解决办法
2008-08-03 11:12 2363错误现象: 12:49:46,251 INFO [STDO ... -
struts1.2 显示多维数组
2008-08-03 11:09 1181jsp page: <logic:iterate na ... -
软件需求分析规格说明书
2008-08-03 11:09 3278中华人民共和国国家标 ... -
[转] MYSQL导入导出常用命令
2008-08-03 11:08 1014一、备份数据库:(命令在DOS的mysql\bin目录下执行) ... -
产生Hibernate数据库表映射文件的方法
2008-08-03 11:00 14611。根据powerdesigner的cdm文件生成 hiber ... -
用Eclipse、Tomcat、Lomboz搭建jsp开发环境
2008-08-03 10:59 23171.安装jdk1.4.0+,安装Tomca ... -
POJO 与 PO的 概念
2008-08-03 10:58 856POJO = pure old java object or ... -
spring入门编程问题集锦
2008-08-03 10:54 1243spring入门编程问题集锦 1、如何学习Spring? ... -
nohup命令
2008-08-03 10:53 2179nohup 命令 用途 不挂断 ... -
板载RAID在安装OS时都需添加驱动,否则认不出硬盘。
2008-08-03 10:52 13821、 PermGen space的全称是Permanent ... -
RAID问题集锦
2008-08-03 10:52 1011板载RAID在安装OS时都需添加驱动,否则认不出硬盘。WIN2 ... -
引导Linux的三种简便方法
2008-08-03 10:50 929引导Linux的三种简便方法方法1:引导软盘(1)在linux ...
相关推荐
记住,使用Find命令时一定要谨慎,特别是涉及到删除操作,以免误删重要文件。在实际工作中,可以结合其他命令如`grep`、`awk`等,构建更复杂的文件查找和处理流程。希望这个指南能帮助你更好地理解和运用Linux Find...
以上只是一些基本的示例,实际上,HP UNIX和AIX命令的差异可能更为复杂,涉及到权限管理、网络配置、性能监控等高级功能。这份对照表将帮助系统管理员更高效地在两种系统间进行切换,理解命令的差异,提升工作效率。...
在Unix操作系统中,掌握一些基本的命令是必不可少的。这些命令涵盖了从文件和目录操作到系统管理和用户交互的广泛领域。以下是对标题和描述中提到的...了解和熟练使用这些命令将极大地提升你在Unix环境中的工作效率。
对于初学者和高级用户来说,掌握Ubuntu的命令行工具,尤其是Unix命令,是提升效率和解决问题的关键。Ubuntu命令大全与Unix命令大全是同一个概念,因为Ubuntu是基于Unix哲学构建的。这份资料"Unix命令大全 - Ubuntu...
在“shell编程和unix命令.pdf”这个文档中,很可能会详细阐述这些概念,并通过实例展示如何编写和执行Shell脚本,以及如何有效地使用Unix命令。这份资料可能包括了基本语法、命令用法、高级技巧,以及如何调试和优化...
### UNIX操作系统命令详解 #### 一、概述 UNIX操作系统是一种多用户、多任务的操作系统,广泛应用于服务器领域。本文档将详细介绍UNIX中的常用命令及其功能,并通过实例展示这些命令的具体应用。特别关注了vi编辑...
《Unix命令任务大全-Unix ToolBox》是一本针对Unix、Linux和BSD操作系统的实用手册,旨在为高级用户和IT专业人士提供全面的命令行工具参考。这份文档深入浅出地介绍了这些系统中的各种命令和任务执行方法,对于熟悉...
在Shell脚本中,你可以使用变量、条件语句、循环、函数等编程元素,同时结合Unix命令来实现更高级的功能。 Unix命令是Unix系统中的一组工具,它们各自执行特定的任务。例如: 1. `ls`:列出目录内容,帮助用户查看...
在Unix命令方面,书中会涵盖诸如`ls`、`cd`、`pwd`、`mkdir`、`rm`、`cp`、`mv`等基础命令,以及更高级的命令如`grep`、`find`、`sed`、`awk`等,这些命令是Unix/Linux用户日常工作的得力工具。通过学习这些命令,...
### Unix基本命令精讲 Unix,作为现代操作系统的基础之一,其强大的命令行界面为系统管理、编程...这些命令构成了Unix基础操作的核心,掌握它们不仅能够提高日常工作效率,也是进一步学习更高级Unix功能和技巧的基础。
在HP-UNIX操作系统中,命令行是主要的...以上只是HP-UNIX系统命令的一部分,实际上还有更多高级命令和系统管理工具,如网络配置、进程管理、系统监控等。深入理解和熟练掌握这些命令,能够有效地进行系统管理和维护。
下面将详细介绍这两个标签所涵盖的Unix基本命令,以及如何使用`find`和`xargs`这两个实用工具。 首先,让我们来看看Unix中的基本命令。这些命令通常是通过终端或命令行界面执行的,它们是Unix系统交互的基础: 1. ...
UNIX系统还提供了许多其他功能强大的命令,如文件创建、删除、移动的`touch`、`rm`、`mv`命令,文件权限管理的`chmod`命令,文件搜索的`find`命令,以及帮助系统如`man`命令,用于查看命令的详细使用说明。...
这个压缩包包含了"UNIX参考大全"和"Unix命令大全"两个资源,旨在帮助用户深入理解和掌握UNIX操作系统的使用。 首先,"UNIX参考大全"通常是一本详尽的指南,涵盖了UNIX系统的各个方面,包括系统架构、内核机制、进程...
以上仅是Unix命令中的一部分,实际的学习资料可能会包含更多高级命令、shell脚本编程、进程管理、网络配置等内容。通过学习和熟练掌握这些命令,不仅可以提高日常的Unix操作效率,也有助于应对各种技术面试和专业...
在IT领域,Linux和Unix操作系统以其稳定性和灵活性深受技术人员喜爱,而Shell作为它们的命令行接口,是系统管理员和开发者日常工作中不可或缺的工具。本文将深入讲解Linux/Unix Shell命令和编程,包括AWK和Perl的...
这些只是基础的UNIX命令,深入学习还包括管道(|)、重定向(>,<,>>)、脚本编写等高级主题。通过熟练掌握这些命令,你可以更有效地在UNIX环境中工作,无论是日常操作还是进行系统维护。在《UNIX系统操作命令大全...
通过深入学习"UNIX操作系统命令大全",用户不仅可以提高工作效率,还能更好地理解操作系统底层工作原理,为更高级的系统管理和开发工作打下坚实基础。对于初次接触UNIX的用户,建议从基础命令开始,逐步熟悉命令用法...
在IT领域,Unix系统及其衍生版本(如Linux)是广泛使用的操作系统,尤其在服务器和开发环境中。Unix命令行工具和Shell编程是Unix/Linux系统的核心部分,对于任何IT专业人士来说,掌握这些技能至关重要。本指南旨在...
【课程介绍】 ...随着熟练度的提高,可以进一步探索更高级的shell脚本编写和系统管理技巧,从而在UNIX系统中实现自动化工作流程。在实践中不断学习和应用,将有助于成为一名精通UNIX操作系统的专家。