Из man zip
страница:
zip - r foo foo -x \ *. o
, который будет включать содержимое foo в foo.zip, исключая все файлы, заканчивающиеся на .o. Обратная косая черта позволяет избежать подстановки имени файла оболочки, так что сопоставление имен выполняется с помощью zip на всех уровнях каталогов .
Вы должны убедиться, что ваш глобус *
расширяется не оболочкой, а самой утилитой zip
, иначе это повлияет только на файлы непосредственно в каталоге / etc / alternatives и не будет нацеливаться на подкаталоги. Это можно сделать, добавив обратную косую черту перед *
или процитировав его:
sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* –x /etc/alternatives/\*
Однако похоже, что вы уже пробовали аналогичный способ - мне не ясно, почему это не сработало для ты, пока должен.Тем не менее, есть и другие способы достижения аналогичного эффекта, например, использование дополнительных инструментов для исключения ненужных файлов перед вызовом утилиты zip
:
sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip $(sudo find /etc | grep -v ^/etc/alternatives)
Примечание :этот ответ относится к первой версии вопроса.
Сначала определим i
с помощью вкладки:
$ i=$'ls -l\tcd ~'
Теперь давайте попробуем ваши команды без, а затем с двойными -кавычками:
$ echo $i | cut -f2
ls -l cd ~
$ echo "$i" | cut -f2
cd ~
Если вы хотите, чтобы cut
работало должным образом, вам нужно заключить $i
в двойные -кавычки. Без двойных -кавычек оболочка выполняет, среди прочего, разбиение слов , в результате чего табуляция заменяется пробелом. Это препятствует тому, чтобы команда cut
работала так, как вы ожидаете.
Выполнение назначения Command не меняет этого:
$ Command=$(echo $i | cut -f2); declare -p Command
declare -- Command="ls -l cd ~"
$ Command=$(echo "$i" | cut -f2); declare -p Command
declare -- Command="cd ~"
Вы не предоставили здесь более широкий контекст, но, как правило, пытаться помещать команды в переменные — плохая идея. См. "Я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу!" .
Отдельно, что касается переменной COMMAND
, лучше использовать нижний или смешанный регистр для ваших переменных оболочки. Система использует верхний регистр для своих переменных, и вы не хотите случайно перезаписать одну из них.