скрытые файлы CP с шаблонами шарика

Я сказал бы Ваш "sudo ss" выставочное соединение, связанное с пользователем sshd, между тем "netstat - сетью" — Вашему собственному пользователю. Вот почему версия netstat не требует, чтобы sudo узнал детали относительно сокета.

Можно использовать ss -e получить UID также.

13
22.07.2018, 05:55
5 ответов

Отказ от ответственности: Этот ответ соглашения с Bash конкретно, но большой частью его относится к вопросу относительно шаблонов шарика!

Звездообразный символ (*) подстановочный знак. Существует определенный набор символов, что он займет место и первый символ, являющийся точкой (.) не один из них. Это - особый случай только из-за того, как файловые системы Unix работают, файлы, которые запускаются с точки, считают "скрытыми". Это означает это инструменты такой как cp, ls, и т.д. не будет "видеть" их, если явно не сказали, чтобы сделать так.

Примеры

Сначала давайте создадим некоторые демонстрационные данные.

$ mkdir .dotdir{1,2} regdir{1,2}
$ touch .dotfile{1,2} regfile{1..3}

Таким образом, теперь у нас есть следующее:

$ tree -a
.
|-- .dotdir1
|-- .dotdir2
|-- .dotfile1
|-- .dotfile2
|-- regdir1
|-- regdir2
|-- regfile1
|-- regfile2
`-- regfile3

Теперь давайте играть в некоторые игры. Можно использовать команду echo перечислять что конкретный подстановочный знак (*) был бы для данной команды как так:

$ echo *
regdir1 regdir2 regfile1 regfile2 regfile3


$ echo reg*
regdir1 regdir2 regfile1 regfile2 regfile3

$ echo .*
. .. .dotdir1 .dotdir2 .dotfile1 .dotfile2

$ echo .* *
. .. .dotdir1 .dotdir2 .dotfile1 .dotfile2 regdir1 regdir2 regfile1 regfile2 regfile3

$ echo .dotdir*
.dotdir1 .dotdir2

Изменение поведения?

Можно использовать команду shopt -s dotglob изменить поведение * так, чтобы в дополнение к файлам как regfile1 это будет также соответствовать .dotfile1.

выборка от bash страница справочника

dotglob If set, bash includes filenames beginning with a `.' in the results 
        of pathname expansion.

Пример:

$ shopt -s dotglob
$ echo *
.dotdir1 .dotdir2 .dotfile1 .dotfile2 regdir1 regdir2 regfile1 regfile2 regfile3

Можно вернуться это поведение с этой командой:

$ shopt -u dotglob
$ echo *
regdir1 regdir2 regfile1 regfile2 regfile3

Ваша ситуация?

Для Вас Вы говорите cp то, что Вы хотите скопировать все файлы, которые соответствуют шаблону *, и нет никаких файлов.

$ cp foo/.* .

Или можно сделать это, если Вы хотите все в foo папка:

$ cp foo .

Или можно быть явными:

$ cp foot/.* foo/* .

Более компактная форма с помощью расширения фигурной скобки в bash:

$ cp foo/{.,}* .

В любое время можно использовать echo прием для наблюдения, что предложенные шаблоны файла (это - необычный термин для того, что звезда является частью).

$ echo {.,}*
. .. .dotdir1 .dotdir2 .dotfile1 .dotfile2 abc regdir1 regdir2 regfile1 regfile2 regfile3

Случайно, если Вы собираетесь скопировать каталог файлов + другие каталоги, Вы обычно хотите сделать это рекурсивно, это -R переключатель к cp:

$ cp -R foo/. .
19
27.01.2020, 19:52
  • 1
    Вы могли бы хотеть упомянуть использование shopt -s dotglob, echo * затем дает: .dotdir1 .dotdir2 .dotfile1 .dotfile2 regdir1 regdir2 regfile1 regfile2 regfile3 –  Drav Sloan 07.09.2013, 12:32
  • 2
    @DravSloan - благодарит за предложение. Добавленный это. –  slm♦ 07.09.2013, 12:44
  • 3
    cp -r foo . не будет обычно работать с тех пор cp откажется копировать foo по себе Вы, вероятно, имели в виду cp -R foo/. .. (отметьте это cp -R стандартный). –  Stéphane Chazelas 07.09.2013, 18:00
  • 4
    Также обратите внимание что (вполне разумно), zsh не включает . и .. в расширении .*. В zsh, если шаблон не соответствует, команда прерывается (вполне разумно снова), таким образом, в общем случае, cp foo/{,.}* . перестанет работать, если там будет не скрытым или никакие нескрытые файлы. –  Stéphane Chazelas 07.09.2013, 18:04
  • 5
    Этот ответ применяется к удару только. Автор вопроса использует zsh, где ответ намного более прост и shopt не существует. –  Gilles 'SO- stop being evil' 08.09.2013, 00:56

С zsh, типичный путь состоит в том, чтобы использовать D спецификатор шарика (для включения [D]ot файлов):

cp foo/*(D) .

Отметьте это с или без D, шарики zsh никогда не включают . ни .. (как Вы ожидали бы).

29
27.01.2020, 19:52

Оболочка рассматривает те файлы, как скрытый, когда она решает * символ, таким образом, cp не получает ни одних из этих имен файлов как аргументы.

Можно скопировать их путем явного определения cp foo/.* .

4
27.01.2020, 19:52

Если то, что Вы желаете сделать, скопировать все файлы и каталоги от одного места до другого, Вы могли использовать стандарт rsync команда. В примере Вы даете выше:

mkdir foo && touch foo/.test
rsync -a foo/ .

рекурсивно скопирует все содержание foo, включая скрытые файлы и скрытые каталоги, в текущий каталог. Запаздывающая наклонная черта в конце foo/ важно для rsync; с ним только содержание foo копируются, без него, rsync скопирует foo также. Например:-

mkdir src && mkdir dest && touch src/.test
rsync -a src  dest    // copies 'src' contents to 'dest/src'
rsync -a src/ dest    // copies 'src' contents to 'dest' 

Существует много других опций доступная тонкая настройка rsync, включая копирование между машинами.

1
27.01.2020, 19:52

Ответ Stéphane Chazelas zsh ответ верен для одного выражения с глобусом в нем. Однако, если вы хотите установить его для всех выражений по умолчанию, вы можете использовать

setopt GLOB_DOTS

Поместите его в свой ~/.zshrc, чтобы сделать его постоянным.

3
27.01.2020, 19:52

Теги

Похожие вопросы