Linux 中的find命令 让你轻松自在的操作文件

Linux中的find 命令是根据给定条件查找文件和目录的常用命令。与exec配合使用会让你的效率飞起哦!

将 exec 命令与文件命令的输出一起使用

用 exec 执行 find 的基本语法如下:
find [path] [arguments] -exec [command] {} \;

参数讲解:

  • [command]是你要对 find 命令给出的结果执行的操作命令。

  • {}是一个占位符,用于保存 find 命令给出的结果。

  • \; 表示对于每个找到的结果,都会执行[command]。你需要转义成\;

注意: {} 和\ 之间必须有空格;

举例:
find ./ -name file* -exec ls -al {} \;
ls filetxt
ls filetxt
ls filetxt

还有另一种语法与上述略有不同,如下所示:

find [path] [arguments] -exec [command] {} +

在这里+表示对于 find 命令的每个结果,[command] 只执行一次。所有结果都作为参数一起传递给 [command]+ 不需要用\+转义。{} +表示为所有结果参数执行一次命令,返回结果如下:

ls filetxt filetxt filetxt

虽然在这里使用{} +似乎是更好的选择,但如果 find 命令抛出 50 个结果,会导致参数过长出现错误。

find 和 exec 命令的实战案例

1.查找并显示文件属性

显示 /tmp 目录下的所有lock文件并显示它们的属性。

find /tmp/ -type f -name *lock -exec ls -l {} \;

结果如下

collect@local:~$ sudo find /tmp/ -type f -name *lock -exec ls -l {} \; 
-r--r--r-- 1 gdm gdm 11 Jul 17 08:01 /tmp/.X1024-lock
-r--r--r-- 1 gdm gdm 11 Jul 17 08:01 /tmp/.X1025-lock

2.查找和重命名文件

使用 find 和 exec 可以轻松重命名文件。

find /tmp -type f -name 'Centos*' -exec mv {} {}_renamed \;

上面的命令查找以名称 Centos开头的文件并将它们存储在占位符{}中。一旦将结果存储在占位符中,它将在占位符中存储的每个文件的末尾添加_renamed。

3. 收集和存储文件大小

将 /tmp 目录下每个文件的大小,并将输出保存在 /root 目录下,文件名为 test.out

find /tmp/ -type f -exec du -sh {} \; > /root/test.out

4.删除带有特定参数的文件

自动删除文件时请格外小心

find exec 命令组合的另一个常见示例是查找指定文件并删除。比如:清理旧日志。

删除大于 100 MB 的文件

find ~/Desktop -size +100M -exec rm {} \;

同样,你也可以根据文件的创建修改时间来删除文件。例如,让我们删除超过 10 天的文件。

sudo find /tmp/ -type f -mtime +10 -exec rm {} \;

在这使用了 -mtime 来识别过去 24 小时内修改的数据,当与它配对 +10 时,它会查找并删除超过 10 天的文件。

5.执行指定的命令

有些情况下,我们希望对查找到的文件执行某些命令。

例如当我搜索任何 mp3 文件时,我想运行 id3v2 它将带来有关找到的 mp3 文件的详细信息。

find . -name "*.mp3" -exec id3v2 -l {} \;

id3v2 是显示 mp3 文件详细信息的包,-l 用于显示与找到的 mp3 关联的每个 mp3 标签。

6.更改文件和目录的所有权

更改文件和目录的所有权,将用户deploy拥有的文件,改成test

find /home/collect/Downloads -user deploy -type f -exec chown test {} \;

7.更改文件的权限

那么如何使用 find 和 exec 更改文件的权限呢?

find /home/collect/Downloads -type f -exec chmod 644 {} \;

在上面的命令中,使用了-type f 所以该命令只会应用于给定目录下的文件。

8.查看每个文件的md5sum

如何查看/tmp目录下每个文件的md5值。

find /tmp/ -type f -exec md5sum {} \;

可以将结果保存到指定文件中。

find /tmp/ -type f -exec md5sum {} \; > /tmp/test.out

9.结合exec和grep命令

下面的命令搜索所有具有.txt扩展名的文件。使用 grep它会在这些 .txt 文件的内容中搜索字符串excerpt。

find . -type f -name "*.txt" -exec grep -i excerpt {} \;

使用多个 exec 命令查找

如果我们想多次处理查找出来的文件,可以使用多个exec联合处理。

find . -type f -name "*.txt" -exec echo {} \; -exec grep excerpt {} \;

它将首先搜索 .txt 文件,然后使用第一个 exec 命令回显它们的名称。然后,将在这些文件中搜索excerpt字符串。

root@collect# find . -type f -name "*.txt" -exec echo {} \; -exec grep excerpt {} \;
./index.txt
./page.txt
./default.txt
./author.txt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值