Copia de seguridad de un directorio de programación

Copia de seguridad de un directorio de programación

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.outpero 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, programsimplemente ejecute:

mv program{.out,}

Para la segunda pregunta, suponiendo que quisiera obtener una lista de archivos /etccon 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 que test.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

lsproduce una lista de archivos en el directorio.

grep '\.out$'extrae los nombres de archivos que terminan en .out y descarta el resto.

while read filelee 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 echopieza y déjela funcionar de verdad.

ls | grep '\.out$' | while read file; do mv "$file" "${file%.*}"; done

información relacionada