我想重命名一些文件并将其他文件排除到目录中。我试过
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
命令的第二个参数没有正确扩展。
答案1
$(...)
在调用 xargs 之前,shell 正在评估该部分。你可能会尝试的是这样的:
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
命令(如果有)。
答案2
xargs
你也可以不带, 类似的东西来写
find . -mindepth 1 -maxdepth 1 ! -name 000-default.conf ! -name default-ssl.conf -exec sh -c '
sudo mv -- "$0" "$(echo "$0" | sed "s/local.conf/local.example.com.conf/")"
' {} \;