Повторное использование похожих флагов для нескольких команд

Предположим, я хочу выполнить несколько команд с похожими флагами, такими как:

du -sh / --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 tar cvf archive / --exclude=dir1 --exclude=dir2 --exclude=dir3/dir4 

Я хочу повторно использовать последовательность флагов --exclude и сделать код более чистым, например, сохраняя эти флаги в переменной.

Итак, потом над командами выглядят

 du -sh / "$EFLAGS" tar cvf archive / "$EFLAGS" 

Обратите внимание, что tar исключает файлы и каталоги по отношению к данному каталогу.

Какое лучшее и чистое решение?

Задний план

Я хочу сделать резервную копию моей системы с помощью tar и исключить некоторые каталоги, которые мне не нужны.

  • новые строки и переменная bash
  • Экспортируемые переменные внутри сеанса ssh пусты
  • Как изменить (не добавлять) числовую переменную?
  • URL-адрес Bash Shell, построенный с переменными, отсутствует после вставки позади http: //
  • завиток с переменными на скрипте bash
  • awk, как изменить значение файла с помощью наборов параметров?
  • Как назначить строковое значение переменной по нескольким строкам с отступом?
  • Какие оболочки имеют функции, где «local» не изменяет экспортированные переменные для дочерних процессов?
  • 3 Solutions collect form web for “Повторное использование похожих флагов для нескольких команд”

    Вы можете попробовать следующее:

     $ echo -e / --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 / --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 $ echo !!:3-$ echo --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 

    Здесь мы используем расширение истории bash :

    • !! обратитесь к последней команде
    • 3-$ ссылаются на третий параметр до последнего

    Вы должны включить функции расширения истории bash в вашем скрипте, которые отключены в неинтерактивной оболочке:

     set -o history set -o histexpand 

    В Bash очень чистый способ – использовать массивы:

     myflags=( --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 ) tar cvf archive / "${myflags[@]}" 

    Они могут обрабатывать пробелы и любые другие забавные персонажи:

     myflags=( "--exclude=/a dir/with spaces" $'--exclude=/a dir/with\nnewlines' ) tar cvf archive / "${myflags[@]}" 

    Их также можно подделать, например, вы хотите исключить все подкаталоги каталога /this/one , которые содержат букву g :

     exclude_dirs=( /this/one/*g* ) myflags=( "${exclude_dirs[@]/#/--exclude=}" ) tar cvf archive / "${myflags[@]}" 

    Я бы добавил это как комментарий, за исключением того, что я не понял, как правильно форматировать комментарии!

    Во всяком случае, я считаю, что вы на 90%. Пытаться:-

     EFLAGS="--exclude=/dir1 --exclude=/dir2" du -sh / $EFLAGS tar cvf archive / $EFLAGS 

    Котировки нужны в первой строке, так как есть пробелы.

    Нет кавычек при использовании переменной, чтобы она разбивала аргументы на пробелы.

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

    Interesting Posts

    Проблемы с OpenGL и Nvidia с Manjaro после настройки параметров настройки

    Должны ли DNS (записи PTR) настраиваться по-разному для разных сетей ipv6?

    Почему Sun NFS (Network File System) выбирает файловую систему для многих распределенных файловых систем?

    Как проверить, определена ли переменная вообще в Bash до версии 4.2 с помощью опции оболочки nounset?

    Тупик в кронабе между cron и его дочерними несуществующими процессами

    Сценарий оболочки для прокрутки через папку и файлы списка

    Как загрузить модуль виртуального ядра видео ядра?

    Как обрабатывать действие Eject от Nautilus в файловой системе FUSE?

    Корень к минимальному

    Как указать вложение кодировки в командной строке mutt?

    извлекать поля из «хвоста -f» потока syslog

    Почему мой RAID 1 NAS должен «синхронизировать»?

    Создание аудиозаписывающего устройства Linux на ПК под управлением Windows 7 по сети

    Почему я не могу ссылаться на файл, который у меня нет, хотя я могу его переместить?

    Как исправить «операция не разрешена» в ssh?

    Linux и Unix - лучшая ОС в мире.