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:没有这样的文件或目录
您不能将参数扩展与文字字符串一起使用.首先尝试将其存储在变量中:
find . -name '*.xib' -exec bash -c "f='{}' ; echo \${f%.xib}.strings" \;
Run Code Online (Sandbox Code Playgroud)
-exec在它之后看到第一个参数作为命令,因此你不能简单地给它,filename='{}'因为find不用sh来执行你给它的东西.如果你想运行一些shell东西,你需要使用sh或bash结束.
或使用sed:
find . -name '*.xib' | sed 's/.xlib$/.strings/'
Run Code Online (Sandbox Code Playgroud)