Você deve remover as aspas internas ou usar eval
.
O problema é que o "
s agora é considerado parte do nome do arquivo, ou seja, o nome do arquivo errado (que não existe) é tentado ser acessado.
Estou tentando renomear algumas centenas de arquivos com base em outro arquivo no mesmo diretório. Eu encontrei um script e com modificação eu 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 renomear os arquivos corretamente (se existir) quando eu executá-lo manualmente. Quando eu executo o script sem eco, ele dá erros assim:
mv: cannot stat ‘"./dir1/Trailer.mov"’: No such file or directory
Esse erro acontece para cada item, independentemente da existência dos arquivos. Por que isso acontece? Estou correndo como root.
Tags bash mv shell-script