GNU/Linux >> Tutoriales Linux >  >> Linux

¿Mover archivos leyendo sus nombres de archivo a diferentes directorios?

Necesito mover archivos leyendo sus nombres.
Necesito mover archivos generados por el sistema y los nombres incluyen una marca de tiempo. Necesito mover los archivos leyendo el nombre del archivo por mes.

Si el nombre del archivo contiene 201601*.txt , luego vaya a 2016/January directorio. Si el nombre del archivo contiene 201602*.txt luego pase a 2016/February directorio, etc.

Respuesta aceptada:

Bueno, si las cadenas de fecha están en los nombres de los archivos y todos los archivos están en el mismo directorio, podrías hacer:

mv 201601*.txt 2016/January

Hacer esto 12 veces manualmente sería una molestia, así que crearía una lista con el número y el nombre del mes correspondiente:

$ paste <(printf '%sn' {01..12}) <(cal 2016 | grep -Po 's+K[A-Z]w{2,}') 
01  January
02  February
03  March
04  April
05  May
06  June
07  July
08  August
09  September
10  October
11  November
12  December

Y luego analizarlo para construir el mv comandos:

$ paste <(printf '%sn' {01..12}) <(cal 2016 | grep -Po 's+K[A-Z]w{2,}') | 
    while read num month; do echo mv "*2016$num*" 2016/"$month"; done
mv *201601* 2016/January
mv *201602* 2016/February
mv *201603* 2016/March
mv *201604* 2016/April
mv *201605* 2016/May
mv *201606* 2016/June
mv *201607* 2016/July
mv *201608* 2016/August
mv *201609* 2016/September
mv *201610* 2016/October
mv *201611* 2016/November
mv *201612* 2016/December

Una vez que esté seguro de que hace lo que necesita, elimine el echo para mover realmente los archivos:

paste <(printf '%sn' {01..12}) <(cal 2016 | grep -Po 's+K[A-Z]w{2,}') | 
    while read num month; do echo mv "*2016$num*" 2016/"$month"; done

Explicación

El grep -Po 's+K[A-Z]w{2,}') ejecutará grep con expresiones regulares compatibles con Perl (-P ) e imprimirá solo las partes coincidentes de cada línea (-o ). La expresión regular utilizada buscará uno o más caracteres de espacio en blanco (s+ ) seguido de una letra mayúscula ([A-Z] ) y 2 o más caracteres de palabra (w{2,} ). El K significa "ignorar todo antes de esto", lo que hará que el comando solo imprima la parte de las cadenas coincidentes después el espacio en blanco. Todo simplemente imprime la lista de meses.


Linux
  1. Encuentra archivos y directorios en Linux con el comando de búsqueda

  2. Cómo tar (comprimir) archivos, excluyendo ciertos archivos o directorios

  3. ¿Eliminar todos los archivos/directorios excepto un archivo?

  4. Makefiles con archivos fuente en diferentes directorios

  5. ¿Por qué los archivos no pueden ser manipulados por inode?

Comando Ls en Linux (Lista de archivos y directorios)

Cómo copiar archivos y directorios en Linux

Cómo mover archivos y directorios en Linux (comando mv)

Cómo copiar archivos y directorios en la terminal de Linux

Comando Stat:mostrar atributos de archivos y directorios

Mover archivos a directorios según la extensión