Script para copiar arquivos com o nome desejado

3

Eu tenho um problema que estou enfrentando por 6-7 horas e não consigo superá-lo, é por isso que estou pedindo sua ajuda. Preciso criar um script bash que acesse uma pasta e renomeie todos os arquivos dele com um novo nome seguido por um número que representa a hierarquia alalfabética e uma nova extensão.

Os parâmetros estão nesta ordem:
(O novo nome, a nova extensão e a pasta onde estou pesquisando). Por exemplo: ./rename.sh work .txt Documents
Digamos que inicialmente o documento (Documentos) contivesse:
a.txt
b.txt
c.txt
Portanto, depois de executar o script, o documento conterá o seguinte: work01.txt (a partir de a.txt)
work02.txt (de b.txt)
work03.txt (do c.txt)

O problema é que de alguma forma eu estou duplicando os arquivos e estou criando uma grande bagunça. Aqui está o script (rename.sh):

#!/bin/bash
if [ -z "" ]
   then
    echo "No argumets supplied"
   else
    mic="0"
    i="1"
    max="9"
    for file in 'ls  | sort -V'; do
        if ( test $i -le 9)
          then
            cp /$file /$mic$i.
            rm -r /$file
          else
            if ( test $i -ge 9 )
              then          
                cp /$file /$i.
                rm -r /$file
                fi
          fi
        i=$((i+1))  
    done
    echo "$max"
fi
    
por gigiman 09.01.2016 / 18:06

1 resposta

3

Se os seus arquivos forem nomeados a.txt, b.txt e assim por diante, a ordem de agrupamento padrão permitirá que você faça uma expansão simples de glob de nome de arquivo, em vez de precisar classificar os arquivos explicitamente na versão. Então eu sugiro fazer algo mais parecido com

i=1

cd "$dir"
for old in *."$ext"; do 
  printf -v new '%s%02d.%s' "$newbase" $((i++)) "$ext"
  echo mv "$old" "$new"
done

depois de atribuir newbase="" , ext="" , dir="" (com verificações de existência adequadas, é claro). Brinque com ele e remova o echo quando a saída impressa estiver correta.

    
por steeldriver 09.01.2016 / 18:57