终端查找命令:操作输出字符串

Maz*_*yod 5 string bash terminal

我试图从find命令操作文件名:

find . -name "*.xib" -exec echo '{}' ';'
Run Code Online (Sandbox Code Playgroud)

例如,这可能会打印:

./Views/Help/VCHelp.xib

我想说:

./Views/Help/VCHelp.strings

我尝试了什么:

find . -name "*.xib" -exec echo ${'{}'%.*} ';'
Run Code Online (Sandbox Code Playgroud)

但是,"{}"并未被识别为字符串或其他内容......


我也尝试过以下方法:

find . -name "*.xib" -exec filename='{}' ";" -exec echo ${filename%.*} ";"
Run Code Online (Sandbox Code Playgroud)

但它试图执行一个名为"filename"的命令,而不是分配变量:

find:filename:没有这样的文件或目录

liv*_*ter 7

您不能将参数扩展与文字字符串一起使用.首先尝试将其存储在变量中:

find . -name '*.xib' -exec bash -c "f='{}' ; echo \${f%.xib}.strings" \;
Run Code Online (Sandbox Code Playgroud)

-exec在它之后看到第一个参数作为命令,因此你不能简单地给它,filename='{}'因为find不用sh来执行你给它的东西.如果你想运行一些shell东西,你需要使用shbash结束.

或使用sed:

find . -name '*.xib' | sed 's/.xlib$/.strings/'
Run Code Online (Sandbox Code Playgroud)