Intentar crear un script de shell para mover todos los archivos con un año determinado en su nombre a un directorio basado en años

3

Aquí está el bloque de código que tengo hasta ahora. No importa lo que haga con el comando Buscar, parece que no consigo que funcione como quiero. Tratando de mover todos los archivos con estos nombres largos de año en sus propios directorios nombrados.

for i in 2008 2009 2010 2011
do
mkdir /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i
find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -iname '*$i*' -maxdepth 1  -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;
done
GentilmanMyles
fuente

Respuestas:

0

Reemplazar:

find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -iname '*$i*' -maxdepth 1  -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;

Con:

find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -maxdepth 1 -iname "*$i*" -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;

El problema era que $i no se expande dentro de comillas simples. Por lo tanto, utilizar "*$i*" en lugar de '*$i*'.

También, find Prefiere que especifique opciones, como -maxdepth, antes de las pruebas, como -iname. En el código anterior, el orden se modificó en consecuencia.

Por último, en dos lugares utilizas ...Test/$i sin comillas. Esto funciona aquí solo porque $i no contiene espacios en blanco. Si lo hizo, debería estar entre comillas dobles.

John1024
fuente
Lo hizo un poco mejor, pero aún así no se ejecuta correctamente. El segundo $ i se reemplaza por nada, por lo que trató de mover los archivos al mismo directorio de origen.
GentilmanMyles
@GentilmanMyles Funciona bien para mí. Si no le funciona, tendrá que ser más específico sobre lo que realmente está haciendo. Por ejemplo, si $i tiene un valor, el shell nunca lo reemplazará con "nada".
John1024
O a veces simplemente estoy siendo idiota y estoy arruinando mi bucle for al agregar esto. Gracias. Arreglado y funciona.
GentilmanMyles
@GentilmanMyles Muy bien. Me alegra que funcione.
John1024