xargs repl_str não expande o segundo espaço reservado

1

Gostaria de renomear alguns arquivos e excluir outros em um diretório. Eu tentei

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/')

mas não funcionaria.

Acho que o segundo argumento do comando mv não expande corretamente.

    
por Bruno 22.09.2015 / 22:36

2 respostas

2

A parte $(...) está sendo avaliada pelo shell antes mesmo de xargs ser chamado. O que você pode tentar é algo como:

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

Você pode evitar o sed com

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

Veja também o comando rename se você o tiver.

    
por 23.09.2015 / 15:55
0

Você também pode escrever sem xargs , algo como

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/")"

'{} \;

Veja Como este comando find usando "find ... -exec sh -c '...' sh {} +" funciona? para mais detalhes.

    
por 23.09.2015 / 16:59