2015-07-20 3 views
0

Я хочу перечислить указанные файлы (файлы, загруженные вчера) с амазонки S3. Затем я хочу зациклиться на этом списке, и для каждого отдельного элемента списка я хочу разархивировать файл.Bash, issue on for loop

Мой код:

for file in s3cmd ls s3://my-bucket/`date +%Y%m%d -d "1 day ago"`* 
do s3cmd get $file 
arrIN=(${file//my-bucket\//}) 
gunzip ${arrIN[1]} 
done 

так basicaly arrIN = ($ {файл // мой Ведро //}); взрывает мою строку и позволяет мне получить имя файла, который я хочу разархивировать.

Вещь, файл скачиваете, но ничего не будучи разархивировать, поэтому я попытался:

for file in s3cmd ls s3://my-bucket/`date +%Y%m%d -d "1 day ago"`* 
do s3cmd get $file 
echo test1 
done 

Файлы загружаются, но ничего не является эхо. Loop работает только для первой линии ...

+1

'$ file' устанавливается в' s3smd', затем 'ls', затем все, что оценивается в следующем выражении. Это, вероятно, не то, что вы хотите. – choroba

+0

Почему вы используете 'ls' там, кажется лишним. Попробуйте 'echo s3: // my-bucket/$ (date +% Y% m% d -d" 1 день назад ") *' чтобы увидеть, что я имею в виду. – cdarke

ответ

4

Вам нужно использовать подстановку команд для повторения результата команды s3smd ls.

for file in $(s3cmd ls s3://my-bucket/$(date +%Y%m%d -d "1 day ago")*); do 

Однако, это не является предпочтительным способом для перебора вывод команды, так как в теории, результаты могут содержать пробелы. См. Bash FAQ 001 для правильного метода.