Existem comandos para esse tipo de renomeação em massa.
Pessoalmente, uso mmv
:
mmv <SRC_PATH>/"ABC_*.dat" <DEST_PATH>/"ABC_#1_$$.dat"
Estou usando o comando mv para mover um conjunto de arquivos de uma pasta para outra que envolve a renomeação dos arquivos também.
mv <SRC_PATH>/ABC_$t1.dat <DEST_PATH>/ABC_$t1_$$.dat
Estou usando o código acima para um conjunto de arquivos. A única diferença está no nome dos arquivos são o valor da variável $ t1. Por exemplo:
while loop required times
do
t1=<GetValueOfT1 >
mv <SRC_PATH>/ABC_$t1.dat <DEST_PATH>/ABC_$t1_$$.dat
done
No código acima t1 terá valor de 123,234,345.
Então, se eu tiver ABC_123.dat, ABC_234.dat, ABC_345.dat no diretório de origem, meu diretório de destino terá ABC_123_1808.dat, ABC_234_1808.dat, ABC_345_1808.dat, dado que 1808 é o pid.
Mas, afinal, o caminho de destino da movimentação contém apenas o último arquivo. Se eu removi o "$$" do nome do destino, não há problema. Por exemplo:
mv <SRC_PATH>/ABC_$t1.dat <DEST_PATH>/ABC_$t1.dat
O que estou fazendo de errado?
Existem comandos para esse tipo de renomeação em massa.
Pessoalmente, uso mmv
:
mmv <SRC_PATH>/"ABC_*.dat" <DEST_PATH>/"ABC_#1_$$.dat"
Suponha que você tenha uma variável t1
que contenha um conjunto de valores separados por vírgulas:
t1=$(GetValueOfT1) # For example t1='123,456,789'
Você pode aplicar cada um deles por vez com um loop como este
OIFS="$IFS" IFS=,
for v in $t1
do
echo "Processing with v=$v:" >&2
mv "$SRC_PATH/ABC_${v}.dat" "$DEST_PATH/ABC_${v}_$$.dat"
done
IFS="$OIFS"
O primeiro $t1
não deve ser citado porque precisamos que o shell divida o valor em seus caracteres de vírgula. (Isso é controlado pela variável de shell $IFS
, que salvamos para que possamos restaurá-la no final do loop.) As variáveis restantes devem ser todas citadas para protegê-las contra a divisão inesperada de palavras em espaços em branco, vírgulas etc. Finalmente, você tem que apresentar $v
as ${v}
porque senão o shell incluirá o caractere _
imediatamente como parte do nome da variável, e $v_
não é o que nós queremos.
Eu recomendo que você prefixe o mv
com echo
(ou seja, echo mv ...
) antes de executar isso para real, para que você possa examinar a saída antes de alterar qualquer coisa.
Tags bash rename files shell-script