Você poderia fazer um loop no seu script:
nfile="$img_dir$fname"
while [ -e "$nfile" ]
do
((i++))
fname=$(basename "$fline")".$i"
nfile="$img_dir$fname"
done
Agora você tem um nome de arquivo não usado
Tudo,
OK! Tentando mover o arquivo de imagem para a pasta de imagens centrais. Aqui está o meu script:
img_dir='/home/filies/images/'
img_fil='/home/files/img_dump.txt'
i='0'
while read -r fline
do
fpath=$(dirname "$fline")"/"
fname=$(basename "$fline")".$i"
nfile="$img_dir$fname"
if [ ! -e "$nfile" ]; then
# mv "$fline $img_dir$nfile"
echo "NF=> $nfile"
else
((i++))
# mv "$fline $img_dir$nfile.$i"
echo "F=> $fname P=> $fpath"
fi
done < ${img_fil}
exit
Movimentos de arquivos atualmente comentados, até eu acertar ou ter pelo menos um resultado agradável.
Existem dups e meu script atual não incrementará o contador apenas para os dupes do mesmo nome de arquivo, mas para cada ocorrência de dupe.
Existe uma maneira melhor de fazer isso e / ou posso criar uma sub-rotina que faça uma pesquisa no novo diretório de imagens para encontrar o número de incremento mais recente?
Felicidades
OMR
Você poderia fazer um loop no seu script:
nfile="$img_dir$fname"
while [ -e "$nfile" ]
do
((i++))
fname=$(basename "$fline")".$i"
nfile="$img_dir$fname"
done
Agora você tem um nome de arquivo não usado
Você pode carregá-los em uma matriz com globbing e usar o tamanho da matriz:
shopt -s nullglob
dups=("$nfile".*)
shopt -u nullglob
i=${#dups[@]}
((i++))
A numeração vai de 1 para cima, portanto, quando a contagem de arquivos for 0, você ainda precisará aumentá-la uma vez para obter 1. A configuração nullglob
é necessária, caso contrário, o tamanho da matriz seria 1, como explicado aqui: href="https://unix.stackexchange.com/questions/426816/how-to-create-a-possibly-empty-array-from-filename-glob#426817"> Como criar uma matriz possivelmente vazia do nome do arquivo glob shopt -u nullglob
faz o inverso, ie. isso desativa o nullglob
.
Há uma pegadinha aqui com outros nomes de arquivos que se encaixam no padrão "$nfile".*
. *
irá corresponder a qualquer coisa, não apenas números, por isso esteja avisado.
O todo ficaria assim:
img_dir='/home/filies/images/'
img_fil='/home/files/img_dump.txt'
#i='0'
while read -r fline
do
fpath=$(dirname "$fline")"/"
fname=$(basename "$fline")".$i"
nfile="$img_dir$fname"
if [ ! -e "$nfile" ]; then
mv "$fline $img_dir$nfile"
echo "NF=> $nfile"
else
shopt -s nullglob
dups=("$nfile".*)
shopt -u nullglob
i="${#dups[@]}"
((i++))
mv "$fline $img_dir$nfile.$i"
echo "F=> $fname.$i P=> $fpath"
fi
done < "${img_fil}"
exit
Observe a linha
i='0'
está comentado. Em primeiro lugar, porque nesta situação não é necessário. Em segundo lugar, se você usar outra maneira de resolver isso, tenha cuidado para que o valor de i
permaneça aumentado após cada loop de while
se você não redefini-lo.
Eu adicionei .$i
para você nessa linha, então remova-a se não for o que você quer:
echo "F=> $fname.$i P=> $fpath"