
Estou tentando renomear algumas centenas de arquivos com base em outro arquivo no mesmo diretório. Encontrei um script e com modificação tenho o seguinte:
while read file; do echo mv "\"${file%/*}/Trailer.mov\"" "\"${file%.*}-Trailer.mov\""; done < <(find . -type f ! -name "Trailer.mov" -name "*.mkv")
Ele gera comandos mv assim:
mv "./dir1/Trailer.mov" "./dir1/filename-Trailer.mov"
Os comandos mv renomeiam os arquivos corretamente (se existirem) quando eu os executo manualmente. Quando executo o script sem eco, ocorre erros como este:
mv: cannot stat ‘"./dir1/Trailer.mov"’: No such file or directory
Este erro ocorre para cada item, independentemente da existência dos arquivos. Por que isso acontece? Estou executando como root.
Responder1
Você deve remover as aspas internas ou usar eval
.
O problema é que os "
s agora são considerados parte do nome do arquivo, ou seja, tenta-se acessar o nome do arquivo errado (que não existe).