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.