Saltar al contenido

uso de comodines de linux en cp y mv

Solución:

Hablemos de cómo funcionan los comodines por un minuto.

cp *.txt foo

en realidad no invoca cp con un argumento *.txt, si existe algún archivo que coincida con ese glob. En cambio, ejecuta algo como esto:

cp a.txt b.txt c.txt foo

Del mismo modo, algo como

mv *.txt *.old

… no puede saber qué hacer, porque cuando se invoca, lo que ve es:

mv a.txt b.txt c.txt *.old

o, peor aún, si ya tengo un archivo llamado z.old, verá:

mv a.txt b.txt c.txt z.old

Por lo tanto, necesita utilizar diferentes herramientas. Considerar:

# REPLACES: mv /data/*/Sample_*/logs/*_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err
for f in /data/*/Sample_*/logs/*_Data_time.err; do
  mv "$f" "${f%_Data_time.err}_Data_time_orig.err"
done

# REPLACES: cp /data/*/Sample_*/scripts/*.sh /data/*/Sample_*/scripts/*_orig.sh
for f in /data/*/Sample_*/scripts/*.sh; do
  cp "$f" "${f%.sh}_orig.sh"
done

# REPLACES: sh /data/*/Sample_*/scripts/*_orig.sh
for f in /data/*/Sample_*/scripts/*_orig.sh; do
  if [[ -e "$f" ]]; then
    # honor the script's shebang and let it choose an interpreter to use
    "$f"
  else
    # script is not executable, assume POSIX sh (not bash, ksh, etc)
    sh "$f"
  fi
done

Esto usa una expansión de parámetros para eliminar el final del nombre anterior antes de agregar el nuevo nombre.

los find El comando se puede usar de manera bastante concisa en casos simples en los que desea realizar operaciones en coincidencias de nombre de archivo comodín (o más complejas). La siguiente técnica se puede memorizar … ¡casi!

Esto funciona dejando que el find comando ejecute otro comando en cada nombre de archivo que encuentre. Puede ejecutar este ejemplo usando echo en lugar de / delante de mv .

Si quisiéramos mover todos los archivos en el directorio actual con el nombre que comienza con ‘informe’, a otro directorio paralelo llamado ‘informes’:

find . -name "report*.*" -exec mv '{}' ../reports/ ;

La cadena de caracteres comodín debe estar entre comillas, la {} marca del nombre de archivo que se ‘encontró’ debe estar entre comillas y el punto y coma final debe escaparse, todo debido al tratamiento Bash / shell de esos caracteres.

Mire la página del manual para find para más usos: https://linux.die.net/man/1/find

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *