Я использую этот сценарий для открытия документов Microsoft Office в Office Онлайн, чтобы преобразовать их в PDF (для моей работы) и сохранить форматирование. Сценарий для просмотра офисных документов в Microsoft Office Онлайн
Сценарий в основном копирует docx файл в мой ~/Dropbox/Public каталог. Затем это захватывает общедоступный URL и добавляет, это к Office Онлайн связывается для просмотра документов в браузере.
Я часто забываю убирать ~/Dropbox/Public каталог после открытия в Office Онлайн. Следующая команда работает от терминала для убирания этого каталога, но я не мог включить его успешно в мой сценарий. (Я попытался добавить его в конец его и попробовал другие идеи.) Команда ниже удаляет все файлы в ~/Dropbox/Public каталог, но один. Любая справка или предложения очень ценятся.
sleep 60
rm /home/brock/Dropbox/Public/!(My-Document.docx)
Другая возможность (см. сценарий для ссылки на переменную). Этот, которого я принимаю, удалил бы только скопированный файл.
sleep 60
rm /home/brock/Dropbox/Public/$Filename
Неупомянутые строки (такой как *
, ???
, a?c
, abc
) интерпретируются bash
как globbing шаблоны, и они расширены до списка имен файлов, соответствующих globbing шаблону в текущем рабочем каталоге;
С этой точки зрения, неупомянутая строка, не содержащая подстановочные знаки (такой как abc
) все еще интерпретируется как globbing сопоставление с образцом только имя файла такой как abc
;
Основной globbing работает, например, расширение *
к любому количеству любого символа и расширению ?
к отдельному символу;
Однако отрицание globbing шаблона является частью расширенных globbing функций bash
;
Таким образом для расширения !(<globbing_pattern>)
, расширенный globbing должен быть включен в токе bash
экземпляр;
Расширенный globbing включен по умолчанию когда bash
назван в интерактивном режиме:
user@user-X550CL:~/tmp$ tree -a
.
|-- 1
|-- 2
|-- 3
`-- script.sh
0 directories, 4 files
user@user-X550CL:~/tmp$ shopt extglob
extglob on
user@user-X550CL:~/tmp$ rm !(script.sh)
user@user-X550CL:~/tmp$ tree -a
.
`-- script.sh
0 directories, 1 file
Однако расширенный globbing не включен по умолчанию когда bash
назван нев интерактивном режиме (например, при вызове для запущения скрипта):
user@user-X550CL ~/tmp % tree -a
.
|-- 1
|-- 2
|-- 3
`-- script.sh
0 directories, 4 files
user@user-X550CL ~/tmp % cat script.sh
#!/bin/bash
shopt extglob
rm ~/tmp/!(script.sh)
exit 0
user@user-X550CL ~/tmp % bash script.sh
extglob off
script.sh: line 3: syntax error near unexpected token `('
script.sh: line 3: `rm ~/tmp/!(script.sh)'
user@user-X550CL ~/tmp % tree -a
.
|-- 1
|-- 2
|-- 3
`-- script.sh
0 directories, 4 files
Таким образом, решение состоит в том, чтобы просто включить расширенный globbing в сценарии с помощью shopt
встроенный: shopt -s extglob
;
user@user-X550CL ~/tmp % tree -a
.
|-- 1
|-- 2
|-- 3
`-- script.sh
0 directories, 4 files
user@user-X550CL ~/tmp % cat script.sh
#!/bin/bash
shopt -s extglob
shopt extglob
rm ~/tmp/!(script.sh)
exit 0
user@user-X550CL ~/tmp % bash script.sh
extglob on
user@user-X550CL ~/tmp % tree -a
.
`-- script.sh
0 directories, 1 file