1

Я хотел бы рассчитать размер дерева каталогов, которое я собираюсь сжать для архивирования. Я не могу на всю жизнь понять, как работает разделение слов или подстановка команд (которые я пытался использовать для устранения проблемы) в bash.

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

exclude_opts="--exclude='VirtualBox VMs/Windows 7/*'  
--exclude='Software/*'  
--exclude='LSTC/*'"

Затем я упоминаю это в моем звонке

$ du -sb $HOME $exclude_opts

38711578819 /home/patrick  
du: cannot access `VMs/Windows': No such file or directory  
du: cannot access `7/*"': No such file or directory  
38711578819 total

Хорошо; $exclude_opts по какой-то причине разделяется на слова. Как это исправить? Все мои попытки провалились.

Я хотел бы сделать это из того же файла; нет --exclude-from

2 ответа2

1

Вам действительно нужно использовать массивы при сборе таких аргументов. Массивы будут корректно обрабатывать пробелы:

Обновление: удаление одинарных кавычек и "/*" из параметров исключения

exclude_opts=(
  "--exclude=VirtualBox VMs/Windows 7"
  "--exclude=Software"
  "--exclude=LSTC"
)

du -sb "$HOME" "${exclude_opts[@]}"
0

Я попытался смоделировать вашу ситуацию и обнаружил, что работает следующее:

--exclude="Windows 7"

Эти не работают:

--exclude='Windows 7/*'
--exclude='VirtualBox VMs/Windows 7/*'

В принципе, это работает, если я только включаю непосредственный каталог, без подстановочных знаков. Моя система - сервер Linux с версией ядра 2.6.9.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .