Использование for в скрипте, командной строке Ubuntu - PullRequest
0 голосов
/ 28 апреля 2020

Как я могу передать каждый из моих файлов репозитория и что-то с ними сделать?

Например, я хочу сделать скрипт:

#!/bin/bash
cd /myself
#for-loop that will select one by one all the files in /myself
#for each X file I will do this:
tar -cvfz X.tar.gz /myself2

Ответы [ 3 ]

0 голосов
/ 28 апреля 2020

вы можете использовать while l oop, так как он позаботится о целых строках, включая пробелы:

#!/bin/bash
cd /myself
ls|while read f
do
tar -cvfz "$f.tar.gz" "$f"
done
0 голосов
/ 28 апреля 2020

вы также можете попробовать этот способ.

для меня в $ (ls / self / *)

do

tar -cvfz $ f.tar.gz / myfile2

сделано

0 голосов
/ 28 апреля 2020

Таким образом, a для l oop в bash аналогично модели python (или, может быть, наоборот?).

Модель выглядит как "например, в списке":

for some_instance in "${MY_ARRAY[@]}"; do
    echo "doing something with $some_instance"
done

Чтобы получить список файлов в каталоге, быстрый и грязный способ состоит в том, чтобы проанализировать вывод ls и преобразовать его в массив, а-ля array=($(ls)) Чтобы быстро объяснить, что происходит здесь, насколько мне известно, назначение переменной для строки, разделенной пробелом, заключенной в скобки, разделяет строку и превращает ее в список.

Недостатком синтаксического анализа ls является то, что он не учитывает файлы с пробелами в их именах. Для этого я оставлю вам ссылку на превращение содержимого каталога в массив , то же самое место, которое я с любовью :) сорвал с оригинальной команды array=($(ls -d */)).

...