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+666
para começar em 667. - use
%02d
ou%06d
para 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
mv
pode 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 nullglob
evitará erros de expansão.Em geralnão é seguro analisar osaída de
ls
mesmo que no seu caso não seja um problema real, pois você deve ter para os arquivos o nome padrão de cameraDSC_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.