Use apenas read
para ler uma linha de STDIN, assim.
for FILE in *; do
echo "Rename '$FILE' to:"
read NAME
mv "$FILE" "$NAME"
done
Este exemplo exige que você pressione Ctrl-C para abortar quando terminar, mas você pode adicionar um caso if
extra para abortar. se nenhum nome foi inserido.
EDITAR: Se você quiser que todos os seus arquivos de destino tenham a mesma extensão de arquivo do arquivo original (por exemplo, se o arquivo foi chamado pogo.jpg
, você deseja que o arquivo renomeado mantenha o arquivo .jpg
ending, e não precisa digitar isso manualmente) você pode alterar o comando mv
no loop acima para:
mv "$FILE" "$NAME.${FILE##*.}"
O material ${FILE##*.}
na string acima significa:
-
${FILE...}
exibe a variável$FILE
, mas… -
##
remove a cadeia de correspondência mais longa desde o início (apenas um#
corresponde ao menor) -
*
corresponde zero ou mais de qualquer caractere -
.
corresponde a um período literal
Somente se a expressão inteira ( *.
) corresponder a ela será removida, assim, se não houver um período no nome do arquivo original, você obterá um resultado estranho e o novo nome do arquivo será NEWNAME.OLDNAME
. / p>