Estoy intentando cargar todos los archivos en un directorio en s3 usando fechas en los nombres de archivos como parámetros para crear las ubicaciones de s3. Esto es lo que tengo hasta ahora.
for file in /home/ec2-user/clickparts/t*; do
year="${file:9:4}"
month="${file:14:2}"
day="${file:17:2}"
aws s3 cp "$file" s3://mybucket/json/clicks/clickpartition/$year/$month/$day/
done
A continuación se muestra el resultado del archivo "the_date=2017-05-04"
upload: ./the_date=2017-05-04 to s3://mybucket/json/clicks/clickpartition/-use//c/ic//the_date=2017-05-04
quiero poner el archivo
s3://mybucket/json/clicks/clickpartition/2017/05/04/the_date=2017-05-04
Respuesta1
Dado un archivo "the_date=2017-05-04", su bucle for establecerá la file
variable en /home/ec2-user/clickparts/the_date=2017-05-04
. Si tomas 4 caracteres del noveno carácter, obtienes -use
, que es lo que ves cuando year
se usa tu variable.
Una forma de solucionar esto es tener en cuenta la cantidad de caracteres en su ruta y agregar la cantidad de caracteres (en este caso 26) a cada uno de los números iniciales al configurar las variables de año, mes y día.
Otra forma podría ser cambiar al directorio apropiado antes del bucle for (y volver a cambiar después de que finalice), luego su bucle for se convierte en for file in t*; do
, lo que establecería su file
variable en lo que creo que está esperando.
Respuesta2
También puedes ejecutarlo a través del nombre base.
filename="$(basename -- "$file")"