estoy usando un bucle for similar a éste para truncar los nombres de archivo en una carpeta de 16 caracteres:bash: truncar nombres de archivo, manteniéndolos única
for i in *; do
Shortname=${i:0:16} # Let's assume I don't need the extension
mv "$i" "$Shortname"
done
El problema es: Siempre que dos nombres de archivo tienen la los primeros 16 primeros caracteres, el último sobrescribirá el anterior (en OS X mv se comporta de esa manera).
¿Cómo puedo comprobar si un archivo con el nombre "Nombre corto" ya existe, y si es así, reemplace el último carácter de "Nombre corto" con un número. Luego, verifique nuevamente si existe un archivo con ese nombre, y de ser así, intente con un número más alto. Y así. Si llega al número 9 y hasta ahora se han tomado todos los nombres, debería reemplazar los últimos DOS caracteres del "Nombre corto" con "10" y comprobar si ese archivo ya existe.
Ejemplo: Supongamos que tengo un directorio con los siguientes archivos en ella:
MyTerriblyLongLongFirstFile.jpg
MyTerriblyLongLongSecondFile.jpg
MyTerriblyLongLongThirdFile.jpg
...
MyTerriblyLongLongFourteenthFile.jpg
...
MyTerriblyLongLongOneHundredSixtySeventhFile.jpg
...
MyTerriblyLongLongFiveMillionthFile.jpg
Tenga en cuenta que las primeras 16 letras son las mismas para todos los archivos. Después de ejecutar el guión, me gustaría que se cambiará a esto:
MyTerriblyLongL1.jpg
MyTerriblyLongL2.jpg
MyTerriblyLongL3.jpg
...
MyTerriblyLong14.jpg
...
MyTerriblyLon167.jpg
...
MyTerribl5000000.jpg
No importa si "MyTerriblyLongLongFourteenthFile.jpg" se cambia a "MyTerriblyLong14.jpg", que depende de la clasificación alfabética. Es importante que cada uno obtenga un nombre único.
¿Cuál es la mejor manera de hacerlo?
usted es el hombre. ¡Muchas gracias! – Martin