Você precisa fazer uma iteração no arquivo de mapa, lendo o diretório e o nome do padrão em duas variáveis e usando-as no comando mv
:
sed 's/"//g' map.txt |
while IFS="=" read dir name; do
for file in "$dir"/*; do
mv "$file" "${file/sample/$name}"
done
done
Explicação
-
sed 's/"//g' map.txt
: remova as aspas em torno dos nomes de destino. -
while IFS="=" read dir name; do
:$IFS="="
diz ao seu shell para dividir a entrada em=
, entãoread dir name
lerá o diretório de destino na variável$dir
e o nome em$name
. Como isso é executado na saída do comandosed
, isso será igual ao$name
sem as aspas. -
for file in "$dir"/*; do
: para cada arquivo em cada$dir
. -
mv "$file" "${file/sample/$name}"
: a sintaxe${var/pattern/replacement}
print$var
com a stringpattern
substituída porreplacement
. Então, aqui, ele irá imprimir o nome do arquivo comsample
substituído por qualquer valor atual de$name
.