Как передать каждую строку выходного файла в качестве аргумента в цикл for в том же сценарии bash?

То, что вы хотите, может быть легко сделано. Звоните:

star -x f=archive.tgz -find ! -type l

Последние starисходники находятся в пакете schilytools. star— старейшая бесплатная реализация tar.

0
11.06.2020, 17:09
3 ответа

Прежде всего, если вы хотите проверить, существует ли файл, не нужно использовать восклицательный знак !, так как [ -e FILE ]вернет True if FILE exists.

Но проблема в том, что ваш bash-скрипт не может проверить, существует ли 2019_06, потому что эти файлы находятся в S3. Строки в $FILES — это просто строки.

Вы можете проверить с помощью [ -n STRING ], что означает True if the length of "STRING" is non-zero.

for file in `cat $FILES`
do    
   if [ -n "$file" ]
   then 
      echo $file
      s3cmd du -r  s3://path1/path2/$file
   fi
done
0
19.03.2021, 02:20
aws s3 ls "s3://path1/path2/" | while read file
do    
    # do something with $file
done
1
19.03.2021, 02:20

Использование подстановки может быть проблематичным в некоторых крайних случаях. Далее используется работа find, которая менее чувствительна к этим проблемам.

find "s3://path1/path2/" -type f | while read -r file
do
  echo $file
done
0
26.05.2021, 23:33

Теги

Похожие вопросы