让我们说有类似的目录和文件:
./app/cores/a/conf/props.conf.indexer
./app/cores/a/conf/props.conf.searcher
./app/cores/b/conf/props.conf.indexer
./app/cores/b/conf/props.conf.searcher
./app/cores/c/conf/props.conf.indexer
./app/cores/c/conf/props.conf.searcher
将app目录部署到索引器节点后,我想将app/cores/{core}/conf/props.conf.indexer
更改为app/cores/{core}/conf/props.conf
。
这是我做的:
find ./app/cores/*/conf -name "props.conf.indexer" -exec echo $( cd $(dirname {}) && mv props.conf.indexer props.conf && ls -d props.conf ) \;
但是,它已返回(props.conf.indexer
存在):
mv: rename props.conf.indexer to props.conf: No such file or directory
我的问题是,是否无法将{}
占位符与$()
表达式一起使用。
答案 0 :(得分:1)
您不需要echo
已发送文字的内容,$()
内的所有内容都将在 find
之前进行评估 (正如@Biffen指出的那样)。和ls -d
有什么关系?当然props.conf不是目录吗?
这应该做你想要的:
for file in app/cores/*/conf/props.conf.indexer
do
mv "$file" "${file%.indexer}"
done