Tam*_*man 58 linux command-line find
我正在尝试对我发现的东西运行多个命令,我该如何实现?
find . -exec cmd1; cmd2
Run Code Online (Sandbox Code Playgroud)
似乎不起作用;而是在对每个文件执行 cmd1 之后运行 cmd2。
Den*_*son 39
在这个演示中,我将使用sh -c 'echo first; false'(或true)作为第一个-exec. 这将提供一些输出并具有选定的退出代码效果。然后echo second将用于第二个。假设当前目录中有一个文件。
$ find . -type f -exec sh -c 'echo first; false' \; -exec echo second \;
first
$ find . -type f -exec sh -c 'echo first; true' \; -exec echo second \;
first
second
$ find . -type f \( -exec sh -c 'echo first; false' \; -false -o -exec echo second \; \)
first
second
$ find . -type f \( -exec sh -c 'echo first; false' \; -false -o -exec echo second \; \)
first
second
Run Code Online (Sandbox Code Playgroud)
这种类型的实际命令如下所示:
find . -type f \( -exec command1 \; -false -o -exec command2 \; \)
Run Code Online (Sandbox Code Playgroud)
在第二组中,转义括号将两个-exec子句分组。在-false它们之间迫使测试状态为“假”,并且-o使下一个表达式(第二-exec),以由于进行评价-false。
从 man find:
expr1 expr2
连续的两个表达式被认为是用一个隐含的“和”连接起来的;如果 expr1 为假,则不评估 expr2。expr1 -a expr2
与 expr1 expr2 相同。expr1 -o expr2
或; 如果 expr1 为真,则不评估 expr2。
Ign*_*ams 34
如果您不关心 cmd1 能够阻止 cmd2 由于错误代码运行0:
find . -exec cmd1 \; -exec cmd2 \;
Run Code Online (Sandbox Code Playgroud)
让这两个命令始终运行的唯一可靠方法是find调用一个 shell,该 shell 随后将按顺序运行命令:
find . -exec bash -c 'cmd1; cmd2' filedumper {} \;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49105 次 |
| 最近记录: |