find的-exec指令
时间: 2023-08-13 13:03:46 浏览: 150
`find` 命令中的 `-exec` 选项可以让你执行一个命令来处理查找到的文件。语法如下:
```
find <路径> <选项> <操作>
```
其中 `<操作>` 部分就是 `-exec`。例如:
```
find . -name "*.txt" -exec rm {} \;
```
这个命令会在当前目录及其子目录中查找所有扩展名为 `.txt` 的文件,并执行 `rm` 命令来删除这些文件。在 `-exec` 后面需要加上要执行的命令,花括号 `{}` 表示 `find` 命令查找到的文件名,`\;` 表示命令结束。
你也可以将 `-exec` 后面的命令用引号引起来,这样就可以使用管道、重定向等操作。例如:
```
find . -name "*.txt" -exec sh -c 'cat {} | grep "hello" > {}.out' \;
```
这个命令会在当前目录及其子目录中查找所有扩展名为 `.txt` 的文件,并执行一个 shell 命令来查找其中包含字符串 "hello" 的行,并将结果输出到一个新的文件中。注意,在 shell 命令中使用 `{}` 时需要用引号将整个命令包起来。
相关问题
find -exec 执行多条指令
可以使用`sh -c`来执行多条指令,例如:
```shell
find /path/to/folder -type f -ctime +1 -ctime -2 -exec sh -c 'echo {} && ls -l {}' \;
```
这条命令将会查找在指定文件夹中创建时间是两天前的所有文件,并对每个文件执行两个操作:首先打印出文件路径,然后使用`ls -l`命令显示文件的详细信息。
在`-exec`选项之后的单引号中,`{}`表示当前文件的路径。`sh -c`将会在一个子shell中执行指定的命令,因此可以在单引号中包含多条命令,用`&&`来分隔。
需要注意的是,由于`sh -c`会在一个子shell中执行指定的命令,因此如果你想在命令中使用环境变量或者其他的shell内置命令,可能需要使用双引号来代替单引号,例如:
```shell
find /path/to/folder -type f -ctime +1 -ctime -2 -exec sh -c "echo $HOME && pwd && ls -l {}" \;
```
在这个命令中,我们使用了双引号来包含命令,并使用`$HOME`来引用当前用户的home目录,以及`pwd`来显示当前工作目录。
bin/sh find -exec 执行多条指令
/bin/sh shell 也可以使用和 bash 类似的方式来执行多条指令。你可以使用分号 `;` 或者 `&&` 将多个指令连接在一起,例如:
```shell
find /path/to/folder -type f -ctime +1 -ctime -2 -exec sh -c 'echo {} ; ls -l {}' \;
```
这条命令和上面的命令类似,但是使用了分号 `;` 来分隔两个指令。每个分号 `;` 表示一个新的指令开始,而不需要等待前一个指令执行完成。
你也可以使用 `&&` 来代替分号,这样第二个指令只有在第一个指令成功执行之后才会被执行。例如:
```shell
find /path/to/folder -type f -ctime +1 -ctime -2 -exec sh -c 'echo {} && ls -l {}' \;
```
这条命令和上面的命令类似,但是使用了 `&&` 来代替分号。因为 `&&` 表示只有在前一个指令成功执行之后才会执行后一个指令,所以这条命令只会打印出那些成功执行了 `echo {}` 的文件,而不会打印出执行失败的文件。
如果你想在指令中使用变量或其他 shell 内置命令,也可以使用双引号来代替单引号,例如:
```shell
find /path/to/folder -type f -ctime +1 -ctime -2 -exec sh -c "echo \$HOME && pwd && ls -l {}" \;
```
在这个命令中,我们使用了双引号来包含命令,并使用 `$HOME` 来引用当前用户的home目录,以及 `pwd` 来显示当前工作目录。由于 `$` 符号在双引号中有特殊的含义,因此需要使用反斜杠 `\` 来转义 `$` 符号,让它不会被解释成一个变量。
阅读全文