Se sua estrutura tiver apenas dois níveis, você não precisará recursionar.
Não analise nomes de arquivos com sed . Se você quiser usar a sintaxe regex e sed style para renomear arquivos, use rename . Se você está usando o Ubuntu 17.10, você precisa instalá-lo
sudo apt install rename
Então você pode usar resposta do pa4080 .
Com rename , use a opção -n para testes.
rename -n 'expression' file(s)
Você também pode usar apenas o comando mv . Como um comando de uma linha:
for d in ./*/; do mv -v "$d" "${d/Edition/Volume}"; done; for f in ./*/*; do mv -v "$f" "${f/Edition/Volume}"; done
Você pode usar echo para testes com mv , ou seja, echo mv -v source dest , mas fornece resultados imprecisos aqui, a menos que você teste e execute os loops separadamente.
Como um script:
#!/bin/bash
# rename directories first
for d in ./*/; do
mv -v "$d" "${d/Edition/Volume}"
done
# now rename files
for f in ./*/*; do
mv -v "$f" "${f/Edition/Volume}"
done
mv e rename reconhecem -- para indicar o final das opções. Como todos os caminhos começam com ./ neste exemplo, não precisamos usar isso, mas se os caminhos puderem começar com - , use -- no final das opções, por exemplo, rename -n -- 's/foo/bar/' * , para evitar esses caminhos sendo interpretado como opções.