如何替换{}bash 的“查找”找到的字符串?
例如,我想?在下面用“out”替换“in”:
find . -name "*.in" -exec python somescript.py {} ? \;
即对所有“*.in”文件执行
python somescript.py somefile.in somefile.out
Gil*_*il' 11
find没有替换功能。你需要调用一个shell。
find . -name "*.in" -exec sh -c 'python somescript.py "$0" "${0%.in}.out"' {} \;
Run Code Online (Sandbox Code Playgroud)
$0是文件名,${0%.in}删除.in后缀。
或者,在 bash(但不是纯 sh)中,运行shopt -s globstar以启用递归目录扩展(shopt -s nullglob如果存在没有任何匹配.in文件的风险)并使用for循环而不是find.
for x in **/*.in; do
python somescript.py "$x" "${x%.in}.out"
done
Run Code Online (Sandbox Code Playgroud)
find . -name "*.in" -exec bash -c 'python script.py "${0%.*}"{.in,.out}' {} \;
Run Code Online (Sandbox Code Playgroud)
find . -name "*.in" -exec bash -c 'python script.py "${0} ${0/.in/.out}"' {} \;
Run Code Online (Sandbox Code Playgroud)
结果:
python script.py somefile.in somefile.out
Run Code Online (Sandbox Code Playgroud)