L oop, чтобы назначить переменные, чтобы вырезать части имени файла, а затем использовать в команде для каждого файла в директории - PullRequest
0 голосов
/ 12 марта 2020

Я хочу загрузить файлы в разделенные по дате объекты s3. У меня много файлов в каталоге, и я хочу переместить каждый файл в структуру папок, полученную из даты в имени файла.

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://bk-py-dev/json/clicks/clickpartition/$year/$month/$day/; done

Было бы замечательно, если бы я мог сделать это в этом однострочнике формат. Имя файла в формате the_date = 2019-03-05. json

1 Ответ

0 голосов
/ 12 марта 2020

У вас уже есть хорошее решение. Альтернативой может быть

topdir="bk-py-dev/json/clicks/clickpartition"
while IFS=- read -r xxxyear month dayjson; do
   aws s3 cp "${xxxyear}-${month}-${dayjson}" s3://${topdir}/${xxxyear#*=}/${month}/${dayjson%.*}
done < <(find * -maxdepth 0 -type f -name '*.json' )

Я не знаю, почему вы хотели бы, чтобы это было в одной строке.
Вы можете добавить функцию с этим кодом в вашем .bashrc, как upload2s3() {..}, и теперь вы можете позвонить oneliner upload2s3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...