Можно использовать эту команду для резервного копирования всего dotfiles (.<something>
) в Вашем $HOME
каталог:
$ cd ~
$ find . -maxdepth 1 -type f -name ".*" -exec tar zcvf dotfiles.tar.gz {} +
Я исследовал это вполне немного и подошел пустой. Ограничивающий фактор был бы этим когда tar
работает это, исключает, запаздывающая наклонная черта (/
) это обнаруживается с каталогами, не часть уравнения, когда tar выполняет свое соответствие шаблона.
Вот пример:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*/'} .*
.qalculate/
.qt/
.qterm/
.qtoctave/
.RapidSVN
.RData
.Rhistory
Этот вариант включает исключение .*/
и Вы видите с подробным переключателем, включенным к tar, -v
, то, что эти каталоги проходят, которые исключают.
Я думал, возможно, переключатели --no-wildcards-match-slash
или --wildcards-match-slash
ослабил бы жадность .*/
но это не имело никакого эффекта также.
Взятие наклонной черты из исключения, .*
не была опция ни одним, так как это скажет tar
исключить весь dotfiles и dotdirectories:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*'} .*
$
Таким образом, единственная другая альтернатива, которую я могу задумать, должна предоставить список файлов к tar
. Что-то вроде этого:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --wildcards-match-slash --exclude={'.','..','.*/'} $(ls -aF | grep -E "^\..*[^/]$")
.RapidSVN
.RData
.Rhistory
Этот подход имеет проблемы, если бы количество файлов превышает максимальную сумму пространства для передающих аргументов команде, была бы одна явная проблема. Другой то, что это ужасно и чрезмерно сложно.
Кажется, нет простого и изящного способа выполнить это использование tar
И регулярные выражения. Чтобы к комментарию @terdon, find ... | tar ...
действительно более соответствующий способ сделать это.
То, что вы здесь видите, называется программируемым завершением . В системах на основе Debian / Ubunutu пакеты часто устанавливают файл в / usr / share / bash-completions
, который обеспечивает программируемое завершение команды. В других дистрибутивах можно использовать каталог /etc/bash_completion.d
(это расположение не рекомендуется в Debian / Ubuntu, но некоторые пакеты все еще используют его). Для меня файл, содержащий функции, которые генерируют завершение для git
, - это / usr / share / bash-completions /
.
Основной процесс состоит в том, что определяются функции, которые генерируют контент для массива оболочки COMPREPLY
, а затем они регистрируются для определенных команд с использованием встроенной оболочки complete
.
Если вы хотите изменить способ работы завершения, лучше не изменять эти файлы напрямую, поскольку любые изменения могут быть затерты обновлениями системы, а лучше создавать новые версии необходимых функций в определенном для пользователя месте, например .bashrc
в домашнем каталоге.