Renomeia / renumerar arquivos no diretório

0

Em algumas pastas eu tenho muitos arquivos chamados

...
DSC_0002
DSC_0005
DSC_0010
...

Eu quero renomear / renumerar arquivos

FILE_0001
FILE_0002
...

Maby, precisarei começar a numeração NÃO de 0001

    
por Yuchimenko Igor 28.09.2015 / 08:40

3 respostas

2

Digamos que o diretório que contém esses arquivos seja / path / to / dir
o script que você precisa ficará assim:

start=1
cd "/path/to/dir"
for file in ./*;do
  mv "${file}" "FILE_$(printf "%04d" $start)"
  start=$((start+1))
done
    
por 28.09.2015 / 08:58
0

tente

ls | awk '{printf "mv %s FILE_%04d\n",$0,NR ;} ' | bash
  • certifique-se de que nenhum arquivo tenha nomes engraçados.
  • remove | bash part para ter uma pré-visualização.
  • use NR+666 para começar em 667.
  • use %02d ou %06d para gerar uma taxa igual a 01 ou 000001.
por 28.09.2015 / 08:56
0

Você pode fazer algo como:

#!/bin/bash 
Counter=${1:-1}   # It will take the starting number as 1st parameter
WhichDir=${2:-.}  # It will take the path as 2nd parameter

                  # We try to see if the directory exists and if you can go there
(cd "$WhichDir" 2>/dev/null) || { echo "# $WhichDir NOT FOUND " ; exit 1; }

cd "$WhichDir"                            # it exists and you can go there
shopt -s nullglob                         # see notes
for f in DSC_*                            # for all the files in this dir
do
  New_Name=$(printf "FILE_%04d.jpg" $Counter)
                                          # change .jpg in what you need
  Counter=$(($Counter +1))                # increase the counter
  echo "mv -i \"$f\" \"$New_Name\" "      # the -i will prompt before overwrite
  # mv -i "$f" "$New_Name"                # uncomment this line to make it works
exit 0

Notas

  • Quando você reproduzir com mv pode ser perigoso. Pode sobrescrever arquivos existentes. Pode mover / renomear o diretório. Por isso, é melhor ter uma verificação visual antes de executar um script. Então você pode canalizar sua saída em um shell:
    por exemplo. ./Myscript.sh , tudo bem? Se sim, então você pode escrever ./Myscript.sh | /bin/bash (ou você pode modificá-lo apagando o "eco" ou o comentário na linha seguinte).
  • É melhor escrever mv -i : ele será avisado antes de sobrescrever
  • Se não houver arquivos DSC_* no diretório atual, o shopt -s nullglob evitará erros de expansão.

  • Em geral não é seguro analisar a saída de ls mesmo se no seu caso, não deve ser um problema real, porque você deve ter para os arquivos o nome padrão da câmera DSC_nnnn.jpg .

  • Geralmente há uma extensão (talvez .jpg ou .tif ou .raw ) ... altere-a ou apague-a no script para atender às suas necessidades.
por 28.09.2015 / 09:02