Alterando a extensão dos arquivos em loop [duplicado]

0

Eu quero alterar extensões de alguns arquivos, usando o loop.

#!/bin/bash
read -p "type the path for folder " folder                                 
read -p "type the extention of files to be renamed " ext
read -p "type the extention you want to add " next
next=.$next
ext=.$ext
if [ $? -eq 0 ]
then
e='ls $folder/*$ext | cut -d '.' -f1'                                      
for i in 'ls $folder/*$ext'
do
mv $i $e
mv $e $e$next
done
ls $folder/*.$next
fi

Eu estou falhando.

    
por Josef Klimuk 14.12.2017 / 06:33

1 resposta

1

Veja 10.1. Manipulando Strings - TLDP.org para uma discussão aprofundada da manipulação do string bash. Esta resposta unix se tem a parte essencial da resposta. Basta alterar "txt" para $ext e "text" para $next . O script resultante poderia ser semelhante.

#!/bin/bash
read -p "type the path for folder " folder                                 
read -p "type the extension of files to be renamed " ext
read -p "type the extension you want to add " next
# TODO add sanity checks for the user supplied input
cd $folder
# rename
#rename "s/.$ext$/.$next/" *.$ext
# mv in a loop
for f in *.$ext; do 
# the '--' marks the end of command options so that files starting with '-' wont cause problems.
# Replaces the first match for '.$ext' with '.$next'.
#mv -- "$f" "${f/$ext/$next}"
# Replaces the any match for '.$ext' with '.$next'.
#mv -- "$f" "${f//$ext/$next}"
# Replaces front-end match of for '$ext' with '$next'
#mv -- "$f" "${f/#$ext/$next}"
# Replaces back-end match of for '$ext' with '$next'
mv -- "$f" "${f/%$ext/$next}"
done

Esta pergunta tem muitas abordagens isso não precisa necessariamente de um loop. Eu adoraria rename , veja as linhas comentadas no script acima.

    
por J. Starnes 14.12.2017 / 08:44