Отдельные zip-файлы для папок - За исключением нескольких

Основная ошибка заключается в том, что gsub(/cuv1/, "cuv2")не будет искать переменные, он будет искать строку cuv1и заменит ее на cuv2. Чтобы использовать переменные, вам нужно:

gsub(cuv1,cuv2);

Следующая проблема заключается в том, что вы на самом деле не говорите awkчто-либо печатать. Действие по умолчанию awk, когда выражение оценивается как истинное, заключается в печати строки, поэтому ваша команда (с приведенным выше исправлением )будет печатать любые строки, в которых замена сработала, но не любые другие.

Наконец, вы, похоже, ожидаете, что awk внесет изменение в исходный файл. Для этого вам понадобится расширение GNU awk (gawk )-i inplace. Это, однако, относительно новое и не портативное. Это не будет работать на всех системах. Собрав все это вместе,мы получаем (при условии, что GNU awk):

awk -i inplace  -v cuv1="$word" -v cuv2="$replace" '{gsub(cuv1,cuv2); print;}' "$file"

Более простые решения с использованием sedиperl:

sed -i "s/$word/$replace/g" "$file"
perl -i -pe "s/$word/$replace/g" "$file"
0
14.09.2017, 15:37
1 ответ

Нет, в последней версии Linux эта функция удалена.

Шучу, конечно, можно.

for dir in dir1 dir2 dir3; do
    zip -r "$dir" "$dir"
done

Если каталоги действительно имеют одинаковый префикс:

for dir in dir[1-3]; do
    zip -r "$dir" "$dir"
done

Это предполагает, что цикл выполняется в правильном каталоге.

Если у вас много каталогов и вы хотите исключить только некоторые из них, используйте bashс набором параметров оболочки extglob:

shopt -s extglob
for dir in dir!(4|5); do
   test -d "$dir" || continue
   zip -r "$dir" "$dir"
done

Шаблон dir!(4|5)будет соответствовать любому имени, начинающемуся с dirи продолжающемуся чем угодно, кроме 4или 5. Шаблон также мог быть написан dir!([4-5])или !(dir4|dir5).

Я также убедился, что в последнем цикле любое совпадающее имя, не являющееся именем каталога, пропускается.

4
28.01.2020, 02:19

Теги

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