Linux命令(shell)从入门到精通 学习笔记之2 使用find和xargs(2)
通过下面的命令,我们就可以找出更改时间介于这两者的文件了:
# find / -newer age.awk ! -newer belts.awk -exec ls -l {} \;
从上面可以看出,这种比较必须有参考的文件,比如要查找更改时间在两个小时以内的文件,就必须有一个更改时间正好在两个小时之前那个时刻的文件可以供参考。这里我们可以通过 touch 来创建一个指定更改时间的文件:
假如现在是 12月26日10点41分,那就需要创建一个更改时间在12月26日08点41分的文件:
# touch -t 12260841 oldfile
然后通过:
# find / -newer oldfile -print
来查找更改时间在两个小时内的文件。
9. 用 type 查找指定类型的文件:
在根目录下,查找所有的目录:
# find / -type d - print
查找除目录以外所有类型的文件:
# find / ! -type d -print
查找所有符号链接文件:
# find / -type l -print
查找所有普通文件:
# find / -type f -print
10. 使用 size 选项:
使用可以查找指定长度的文件,可以以字节为单位,也可以用块为单位,1块 = 512字节(0.5M)。
以字节为单位,需要在数字后面加 c,如:
在根目录下查找文件长度大于 1M 的文件:
# find / -size +1000000c -print
用块表示就是:
# find / -size +2 -print
查找刚好是100字节的文件:
# find / -size 100c -print
查找小于100字节的文件:
# find / -size -100c -print
11. 使用 depth 选项:
查找时使用depth命令,可以先在指定文件的根目录下查找所有文件,再进入子目录中查找,有时备份可能需要这样做。
如:从根目录开始,查找名为 "CON.FILE" 的文件,它将首先匹配所有的文件然后再进入子目录查找:
# find / -name "CON.FILE" -depth -print
12. 使用 mount 选项:
查找文件时,可以只在指定目下查找,而不进入子目录下查找,这可以通过 mount 指定。
如:
# find . -name "*.XC" -mount -print
13. 使用cpio选项:
cpio 选项可以用来向磁带设备备份文件或从中恢复文件。结合find,可以在整个文件系统中查找文件,然后用 cpio 命令将其备份到磁带上。
下面的命令:
# cd /
# find etc home apps -depth -print | cpio -ivcdC65535 -o \
/dev/rmt0
\ 用来告诉系统,shell 命令还没有结束,请忽略 \ 后面的回车。该命令用来将 /etc、/home 和 /apps 目录下的文件备份到设备 /dev/rmt0 中。
上面命令中 etc 、home、 apps 前都没有 / ,这是用了相对路径(用了 / 就是绝对路径),之所以用相对路径,是因为:
在从磁带中恢复这些文件的时候,可以选择恢复文件的路径。例如,可以将这些文件先恢复到另外一个目录中,对它们进行某些操作后,再恢复到原始目录中。如果在备份时使用了绝对路径,例如 /etc,那么在恢复时,就只能恢复到 /etc 目录中去,别无其他选择。
上面的命令,告诉 find 命令首先进入 /etc 目录,然后是 /home 和 /apps 目录,先匹配这些目录下的文件,然后再匹配其子目录中的文件,所有这些结果将通过管道传递给 cpio 命令进行备份。
顺便说一下,在上面的例子中 cpio 命令使用了 C65536 选项,我本可以使用 B 选项,不过这样每块的大小只有 512 字节,而使用了 C65536 选项后,块的大小变成了 64K 字节(65536 / 1024) 。
14. 使用 exec 或 ok 选项:
用 find 匹配到一些文件之后,可以用 exec 和 ok 选项来对其进行某些操作。
用 exec 和 ok 的格式是:exec(ok) 选项后面跟随着所要执行的命令,然后是一对儿 {},一个空格和一个\,最后是一个分号。
如:
# find . -type f -exec ls -l {} \;
该命令查找并列出匹配到的文件。
# find logs -type f -mtime +5 -exec rm {} \;
该命令查找更改时间在5天以前的普通文件,并删除它们。