Renomear/renumerar arquivos no diretório

Renomear/renumerar arquivos no diretório

Em algum diretório eu tenho muitos arquivos chamados

...
DSC_0002
DSC_0005
DSC_0010
...

Quero renomear/renumerar arquivos

ARQUIVO_0001
ARQUIVO_0002
...

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

Responder1

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

Responder2

tentar

ls | awk '{printf "mv %s FILE_%04d\n",$0,NR ;} ' | bash
  • certifique-se de que nenhum arquivo tenha nomes engraçados.
  • remove |bash para ter uma prévia.
  • use NR+666para começar em 667.
  • use %02dou %06dpara gerar 01 ou 000001 como figura.

Responder3

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êjogarcom mvpode ser perigoso. Ele pode substituir arquivos existentes. Ele pode mover/renomear o diretório. Portanto, é melhor fazer uma verificação visual antes de executar um script. Então você pode canalizar sua saída em um shell:
    por exemplo ./Myscript.sh, está tudo bem? Se sim, então você pode escrever ./Myscript.sh | /bin/bash(ou pode modificá-lo eliminando o "eco" ou o comentário na linha seguinte).
  • É melhor escrever mv -i: será solicitado antes de substituir
  • Se não houver DSC_*arquivos no diretório atual, shopt -s nullglobevitará erros de expansão.

  • Em geralnão é seguro analisar osaída delsmesmo que no seu caso não seja um problema real, pois você deve ter para os arquivos o nome padrão de camera DSC_nnnn.jpg.

  • Geralmente há uma extensão (talvez .jpgou .tifou .raw)... altere-a ou apague-a no script para atender às suas necessidades.

informação relacionada