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 namelerá o diretório de destino na variável$dire o nome em$name. Como isso é executado na saída do comandosed, isso será igual ao$namesem as aspas. -
for file in "$dir"/*; do: para cada arquivo em cada$dir. -
mv "$file" "${file/sample/$name}": a sintaxe${var/pattern/replacement}print$varcom a stringpatternsubstituída porreplacement. Então, aqui, ele irá imprimir o nome do arquivo comsamplesubstituído por qualquer valor atual de$name.