文本流之于Unix,犹如扭动的丝带,将Unix下的各种小工具组合在一起. 这是unix的哲学基础之一的体现:
"组合原则:设计时考虑拼接组合". 常用工具find, sed的配合使用就是这种组合的体现.
先看find 命令:
1. find 命令的一般形式为:
find pathname –options [-print –exec -ok...]
find的命令参数:
find的命令选项:
find命令的例子;
下面两种方法都可以使用
$ find $HOME -print
$ find ~ -print
$ find . -type f -perm 4 -exec ls -l { } /;
3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;
$ find / -type f -size 0 -exec ls -l { } /;
$ find /var/logs -type f -mtime +7 -ok rm { } /;
5、为了查找系统中所有属于root组的文件;
$find . -group root -exec ls -l { } /;
-rw-r--r-- 1 root root 595 10月 31 01:09 ./fie1
该命令只检查三位数字,所以相应文件的后缀不要超过999。先建几个admin.log*的文件 ,才能使用下面这个命令
$ find . -name "admin.log[0-9][0-9][0-9]" -atime -7 -ok
rm { } /;
< rm ... ./admin.log001 > ? n
< rm ... ./admin.log002 > ? n
< rm ... ./admin.log042 > ? n
< rm ... ./admin.log942 > ? n
$ find . -type d | sort
步骤:找出文件,找到地方,替换。
寻找命令:找到文件(find,ls),找到地方(grep),替换(sed)。
现在需要做的,就是组合起来。
查找资料,有前辈告诫:“find 命令是所有 Linux 命令中最有用的一个,同时也是最混乱的一个”,顿时奔溃。
还好,发现find命令有个叫“-exec”的,很是强大:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} /;,注意{}和/;之间的空格。
个人理解:-exec参数中的“{}”是该参数前命令产生的结果的占位符。
而且还可以有多个-exec参数,很是强大。基本上grep和sed都可以作为子命令在其中运行了。
如此一来,可以使用以下命令列出需要替换的字符串所在的行了:
以下是代码片段:
find ./ -exec grep "/adm/images/c.gif" '{}' /;
然后再使用一个-exec参数吧sed包含进来吧。
以下是代码片段:
find ./ -exec grep "/adm/images/c.gif" '{}' /; -exec sed -i .bak 's///adm//images//c.gif///Admin//Images//c.gif/g' {} /;
8. 重命名文件:
为此要实现上面文件备份的需要,只需要使用命令
find /home/oracle –mtime 1 –exec cp {} /backup/{}.backup /;即可。
另外需要注意的是,在Linux操作系统中find命令只可以找到最近一天修改的文件。而在Linux操作系统中,还有mmin参数,这个参数是以分钟为单位,如可以找到那些最近4个小时或者1个小时之内修改过的文件,从而提高备份的频率。为此系统工程师可以根据用户的需要来调整文件备份的频率。不过笔者认为,一般情况下文件备份一天一次即可。