xargs repl_str は、2 番目のプレースホルダを拡張しません。

xargs repl_str は、2 番目のプレースホルダを拡張しません。

いくつかのファイルの名前を変更し、他のファイルをディレクトリから除外したいと思います。頑張った

find . -mindepth 1 -maxdepth 1 ! -name 000-default.conf ! -name default-ssl.conf -print0 |
xargs -0 -I {} sudo mv -- {} $(echo {} | sed 's/local.conf/local.example.com.conf/')

しかし、これはうまくいきません。

mvコマンドの2番目のパラメータが正しく拡張されていないようです。

ベストアンサー1

$(...)シェルはxargsを呼び出す前にこのセクションを評価します。試してみることができるタスクは次のとおりです。

xargs -0 -I {} bash -c 'mv {} $(echo {} | sed "s/local.conf/local.example.com.conf/")'

sedを避けることができます

xargs -0 -I {} bash -c 'f="{}"; mv "{}" "${f/local.conf/local.example.com.conf}"'

利用可能な場合は、コマンドも参照してくださいrename

おすすめ記事