rub*_*o77 4 bash find search-and-replace
我试过这个 bash 命令:
find /var/www/ -path '*wp-admin/index.php' -exec mv {} $(dirname {})/index_disabled
Run Code Online (Sandbox Code Playgroud)
但是第二个{}没有执行。
结果只是./index_disabled相反。
如何在执行命令中两次使用找到的参数?
你的问题不是它没有被解释两次,就像做
find . -type f -exec echo {} {} \;
Run Code Online (Sandbox Code Playgroud)
将会呈现。问题是它{}不能用作函数的参数,正如您所尝试的那样。根据我(有限的)经验,如果您想巧妙处理find和 的内容{},您需要编写一个从 调用的shell 脚本,该脚本find将{}其作为唯一的参数,并在其中执行巧妙的操作脚本。
这是一个聪明的脚本示例:
[me@risby tmp]$ cat /tmp/clever.sh
#!/bin/bash
echo $1 $(dirname $1)/index_disabled
Run Code Online (Sandbox Code Playgroud)
这是我将它与 find 一起使用,以及结果的最后几行:
[me@risby tmp]$ find . -type f -exec /tmp/clever.sh {} \;
[...]
./YubiPAM-1.1-beta1/stamp-h1 ./YubiPAM-1.1-beta1/index_disabled
./YubiPAM-1.1-beta1/depcomp ./YubiPAM-1.1-beta1/index_disabled
./YubiPAM-1.1-beta1/INSTALL ./YubiPAM-1.1-beta1/index_disabled
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,如果我echo在 shellscript 中用替换mv,我会得到想要的结果。
小智 2
您可以使用一个简单的 for 循环来解决这个问题。
for f in $(find /var/www/ -path '*wp-admin/index.php'); do mv $f $(dirname $f)/index_disabled; done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4778 次 |
| 最近记录: |