Tengo un directorio con muchos programas C compilados de los que me gustaría hacer una copia de seguridad. En este momento tienen nombres, program.out
pero me gustaría cambiar esto a solo program
.
¿Aún sería posible excluirlos? Además, ¿qué tipo de expresión regular usaría para cambiarles rápidamente el nombre a todos?
Respuesta1
Para hacer una copia de seguridad de su código, utilice git u otro software de control de versiones. En Internet tienes muchas opciones, por nombrar algunas: github, bitbucket.
En git tienes el archivo .gitignore, si lo agregas allí *.out, no se transferirá al repositorio.
Respuesta2
No tengo muy clara tu primera pregunta. Si desea cambiar el nombre program.out
, program
simplemente ejecute:
mv program{.out,}
Para la segunda pregunta, suponiendo que quisiera obtener una lista de archivos /etc
con un sufijo:
#!/bin/bash
ls /etc > /tmp/etcfiles
while read line
do
if [[ $line =~ \..+ ]]; then
echo $line
fi
done < /tmp/etcfiles
Puede ajustar lo anterior según sea necesario.
\.
coincide con un período literal..
coincide con cualquier carácter que sigue al punto.+
dice que al menos un carácter debe seguir el punto inicial. Entonces esto coincidirátest.c
, pero no.test.
Si desea quetest.
también coincida, cambie+
a*
.
Respuesta3
Si está utilizando bash como shell, esta es una tarea sencilla para una canalización de shell.
ls | grep '\.out$' | while read file; do echo mv "$file" "${file%.*}"; done
ls
produce una lista de archivos en el directorio.
grep '\.out$'
extrae los nombres de archivos que terminan en .out y descarta el resto.
while read file
lee los nombres de los archivos uno a la vez.
echo mv "$file" "${file%.*}"
muestra pero no ejecuta un comando mv que cambiaría el nombre de cada archivo a una versión sin su extensión. El ${file%.*}
negocio es la sintaxis bash para eliminar una extensión de archivo. Cuando esté satisfecho de que la canalización haría lo que desea si se ejecutara de verdad, retire la echo
pieza y déjela funcionar de verdad.
ls | grep '\.out$' | while read file; do mv "$file" "${file%.*}"; done