Следующая команда будет tar
все «точечные» файлы и папки:
tar -zcvf dotfiles.tar.gz .??*
Я знаком с регулярными выражениями , но не понимаю, как их интерпретировать .??*
. Я выполнил ls .??*
и tree .??*
посмотрел на файлы, которые были перечислены. Почему это регулярное выражение включает в себя все файлы в папках, например, начиная с .
?
Ответы:
Глобусы не являются регулярными выражениями. В общем, оболочка будет пытаться интерпретировать все, что вы вводите в командной строке, которые вы не цитируете, как глобус. Оболочки вообще не обязаны поддерживать регулярные выражения (хотя на самом деле многие из более современных более изящных делают, например,
=~
оператор соответствия регулярного выражения вbash
[[
конструкции).Это
.??*
шар. Он соответствует любому имени файла, которое начинается с буквальной точки.
, за которой следуют любые два (не обязательно одинаковых) символа??
, за которыми следует эквивалент регулярного выражения[^/]*
, т. Е. 0 или более символов, которые не являются/
.Для получения полной информации о расширении пути к файлу (полное имя «globbing»), смотрите спецификацию POSIX .
источник
.
и с..
которым обычно ничего не нужно делать. Это не совсем правильно; он не берет ничего с именем '.X
', где X - это какой-то символ, отличный от точки. Я не думаю, что можно написать один глобус, который соответствует каждому точечному файлу, кроме.
и..
, но вы можете сделать это с двумя:tar zcvf dotfiles.tar.gz .[!.] .??*
например.ls .?
возвратил то же самоеls ..
, что означало, что в папке не было других записей, соответствующих шаблону.?
. Я бы сделал.[^.]
для всех.?
файлов, кроме..
.[^abc]
в регулярных выражениях с помощью синтаксиса таких же , как[!abc]
в синтаксисе Глобы (т.е.^
заменяются!
на комки). Использование[^abc]
синтаксиса стилей в глобе не очень переносимо, потому что POSIX не определяет, что это значит, поэтому некоторые оболочки интерпретируют его, используя семантику, подобную регулярному выражению, в то время как другие воспринимают ее^
как буквальный символ..[!.]
их можно оставить в виде литерала вtar
командной строке. Некоторые оболочки позволяют вам контролировать это поведение, например, с помощью bash,shopt -s nullglob
и оно исчезнет из командной строки, если оно ничего не соответствует, но это не универсальная функция..??*
Подстановочные ( не регулярное выражение, хотя это выглядит именно так) переводит в имена файлов , которые начинаются с периода (.
), а затем двумя отдельными символами (??
), а затем любое число (ноль или более) других символов (*
).Может быть, эта страница подстановочных знаков в именах файлов будет полезна.
источник
Чтобы добавить к другим ответам, один
?
будет преобразован в имя файла с одним символом и??
будет соответствовать именам файлов, которые имеют только два символа и так далее.источник