Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

271
Visualizações
bash: trunca los nombres de archivo, agregando un número incremental para duplicados

Me gustaría acortar todos los nombres de archivo en una ubicación determinada, y donde el truncamiento produce duplicados, incluir un número creciente en el nombre de archivo. Estoy casi todo el camino allí, gracias a esta solución: bash: Truncate Filenames, manteniéndolos únicos

Hice una pequeña modificación que le permite cubrir múltiples extensiones de archivo (ya que el original solo se escribió para jpegs). Mi guion:

 num=1 length=8 for file in * do newname=$file extension=${file: -4} until [[ ! -f $newname ]] do (( sublen = length - ${#num} )) printf -v newname '%.*s%d' "$sublen" "$file" "$num" (( num++ )) done mv "$file" "$newname""$extension" done

Lista de archivos originales:

 DumbFilename.txt DumbFilename2.txt DumbFilename3.txt GrossFilename.txt GrossFilename2.txt GrossFilename3.txt LongFilename.doc LongFilename2.doc LongFilename3.doc UglyFilename.doc UglyFilename2.doc UglyFilename3.doc

Salida del código anterior:

 DumbFil1.txt DumbFil2.txt DumbFil3.txt GrossFi4.txt GrossFi5.txt GrossFi6.txt LongFil7.doc LongFil8.doc LongFil9.doc UglyFi10.doc UglyFi11.doc UglyFi12.doc

Mi único problema es que los números se incrementan en una secuencia larga. Solo quiero que aumente para cada instancia de un duplicado, así:

 DumbFil1.txt DumbFil2.txt DumbFil3.txt GrossFi1.txt GrossFi2.txt GrossFi3.txt LongFil1.doc LongFil2.doc LongFil3.doc UglyFil1.doc UglyFil2.doc UglyFil3.doc

¿Cómo hago esto?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

¿Podría intentar lo siguiente?

 length=8 for file in *; do newname=$file extension=${file: -4} for (( num=1; ; num++ )); do (( sublen = length - ${#num} )) printf -v newname '%.*s%d%s' "$sublen" "$file" "$num" "$extension" [[ ! -f $newname ]] && break done mv -- "$file" "$newname" done

Por cierto, su secuencia de comandos original verifica la existencia de $newname sin agregar la extensión, que se romperá en algunas condiciones.

over 4 years ago · Santiago Trujillo Relatório

0

Ponga el nombre de archivo truncado en una variable. En la próxima iteración, verifique si el nombre de archivo truncado actual es el mismo que el anterior. Si es diferente, reinicie num a 1 para comenzar la secuencia nuevamente.

 length=8 num=1 last_truncated= for file in * do newname=$file extension=${file: -4} until [[ ! -f $newname ]] do (( sublen = length - ${#num} )) truncated=${newname:0:$sublen} # reset $num with new prefix if [[ $truncated != $last_truncated ]] then num=1 fi newname=$truncated$num (( num++ )) done last_truncated=truncated mv "$file" "$newname""$extension" done
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda