GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Extraer nombres de nombre de archivo en Bash?

Tengo un directorio lleno con miles de archivos con el formato ApellidoNombreYYYYMMDD.pdf. El apellido y el nombre siempre estarán en mayúsculas y minúsculas.

Me gustaría extraer el apellido para poder mover estos archivos a una estructura de directorio de {primera letra del apellido}/apellido/nombre de archivo completo. Ejemplo:DoeJohn20190327 se movería a D/Doe/DoeJohn20190327

Respuesta aceptada:

Aquí tienes una solución. Lo probé y crea las carpetas como explicaste.

for filename in *.pdf
do
  echo "Processing file $filename "
  first_letter="${filename:0:1}"
  mkdir -p $first_letter #if already exists won't print error
  last_name=$(echo $filename | sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g'  |awk '{print $1}')
  mkdir -p $first_letter/$last_name
  mv $filename $first_letter/$last_name
done

Ubuntu
  1. Configuración de variables de entorno de Shell | Cáscara BASH

  2. ¿Ejecutar scripts de Bash al ingresar a un directorio?

  3. ¿Cómo excluir algunos archivos del mecanismo de expansión de nombre de archivo en Bash?

  4. ¿Por qué no puedo usar Cd en un script Bash?

  5. ¿Cómo evitar que los usuarios accedan al directorio raíz?

Bash break:cómo salir de un bucle

Extraer datos de la tabla HTML

creando un directorio desde el nombre del archivo y moviendo bash

Agregue un script bash a la ruta

¿Cómo ejecutar un script bash?

¿Cómo extraer el nombre de archivo sin la extensión de una ruta completa?