Muchos sistemas Linux de escritorio guardan capturas de pantalla con nombres como Screenshot from 2020-11-29 18-57-51.png
. A menudo, lo que verdaderamente necesitaba era cambiar el nombre de los archivos a algo más obvio como webinar1.png
, webinar2.png
, etcétera. Por suerte, cambiar el nombre de un montón de archivos es muy fácil de hacer en la línea de comandos de Linux.
El shell Bash es muy versátil y proporciona diferentes alternativas para examinar valores y expandir variables. Una buena evaluación es evaluación aritmética. Para realizar esta evaluación, envuelva su declaración aritmética con $((
y ))
.
La evaluación además puede incluir expansión variable, como $sum
para solucionar en un valor. Pero por conveniencia, cualquier variable de Bash listada entre $((
y ))
se expanden automáticamente. A modo de ejemplo, para incrementar el recuento de una variable en 1, puede escribir:
count=$(( count + 1 ))
Esto es lo mismo que escribir:
count=$(( $count + 1 ))
La expansión aritmética admite los mismos operadores que se encuentran en otros lenguajes de programación, incluidos +
y -
para sumar y restar, *
y /
para multiplicación y división, y %
para el resto. Además puedes utilizar ++
y --
para incrementar y reducir un valor en una variable. Consulte la página de manual de Bash y desplácese hacia abajo hasta EVALUACIÓN ARITMÉTICA para obtener la lista completa de operadores admitidos y su precedencia.
Para cambiar el nombre de todas mis capturas de pantalla, necesitaba escribir este comando Bash de una línea:
n=1; for f in Screenshot*.png; do mv -v "$f" webinar$n.png; n=$(( n + 1 )); done
Pero, ¿qué hace esto?
La primera parte del comando, n=1
, inicializa la variable n
a 1.
Entonces uso un for
bucle para operar en todos los archivos que comienzan con Screenshot
y terminar con el .png
extensión. Por lo general, estas son todas las capturas de pantalla que capturé durante mi último seminario web. Si tuviera que ser más preciso, podría incluir la fecha en esa especificación de archivo, como Screenshot from 2020-11-29*.png
. Las barras diagonales inversas son escapes literales para conservar los espacios en el nombre del archivo.
Cada iteración del bucle for almacena un nombre de archivo en la variable f. Entonces el mv
mando mv -v "$f" webinar$n.png
cambia el nombre de cada archivo a mis nombres de archivo preferidos como webinar1.png
, webinar2.png
, etcétera. Necesito citas alrededor del $f
expansión variable para que los espacios en Screenshot from YYYY-MM-DD hh-mm-ss.png
no provoques problemas en mi mv
mando. Si recibe un error como mv: target 'webinar1.png' is not a directory
, probablemente no pusiste comillas alrededor del $f
.
En resumen, incremento el valor en el n
variable para que esté lista para la próxima iteración en el ciclo. La expansión aritmética n=$(( n + 1 ))
incrementa el n
variable en 1.