powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Копирование файлов.
6 сообщений из 6, страница 1 из 1
Копирование файлов.
    #35994195
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как рекурсивно скопировать каталог без скрытых файлов и каталогов?
Команда cp как-то с паттернами совсем не дружит. Хотя может я не разобрался. Попытался сделать при помощи команды find, но не могу написать паттерн, который находит все файлы, кроме скрытых.
find -name ".*" вот так все скрытые нахожу
find -name "^.*" вот так ничего не находит, хотя должен найти все, кроме скрытых

Сделал так - find -path '*/.*' -prune -o -print
но хочется все-таки разобраться с паттернами. Или с ними такого не сделать?
...
Рейтинг: 0 / 0
Копирование файлов.
    #35995228
avb1003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen...
Команда cp как-то с паттернами совсем не дружит. Хотя может я не разобрался.
...Действительно, "не дружит". С ними "дружит" shell и программа cp в качестве аргументов
получает уже "раскрытые" шаблоны. Это одна из удачных "фишек" Unix-а - не нужно дублировать
работу с шаблонами в прикладных программах или скриптах.
wessen Попытался сделать при помощи команды find, но не могу написать паттерн, который находит все файлы, кроме скрытых.
find -name ".*" вот так все скрытые нахожуИ это правильноwessen
find -name "^.*" вот так ничего не находит, хотя должен найти все, кроме скрытыхА это с чего Вы взяли ?Тогда уж
Код: plaintext
find -name "[!.]*
- должно найти все "открытые" и в скрытых каталогах тоже.
В общем, man find, man 7 glob и т.д.
wessen
Сделал так - find -path '*/.*' -prune -o -print
но хочется все-таки разобраться с паттернами.Хочется - разбирайтесьwessen Или с ними такого не сделать?А почему Вы считаете, что Ваш последний вариант без шаблонов?
...
Рейтинг: 0 / 0
Копирование файлов.
    #35996111
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avb1003Действительно, "не дружит". С ними "дружит" shell и программа cp в качестве аргументов
получает уже "раскрытые" шаблоны. Это одна из удачных "фишек" Unix-а - не нужно дублировать
работу с шаблонами в прикладных программах или скриптах.

Вот команда rm дружит и еще куча команд дружит, а cp не дружит и для меня это было не так явно.

avb1003
А это с чего Вы взяли ?Тогда уж
Код: plaintext
find -name "[!.]*
- должно найти все "открытые" и в скрытых каталогах тоже.
В общем, man find, man 7 glob и т.д.


Так находятся все файлы и скрытые тоже.
Пытался так
Код: plaintext
find|grep -v ".*"
, но ничего не находилось. Команда find делает вот такой вывод:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
./.svn
./.svn/tmp
./.svn/tmp/prop-base
./.svn/tmp/text-base
./.svn/tmp/props
./.svn/all-wcprops
./.svn/prop-base
./.svn/text-base
./.svn/text-base/eip-mac-bridge-service.xml.svn-base
./.svn/props
./.svn/entries
./eip-mac-bridge-service.xml

то есть все пути начинаются с точки и отсекается соответственно все. В общем, если кто-то подскажет, как убрать ведущие символы ./ из вывода команды find, буду очень признателен.

avb1003
А почему Вы считаете, что Ваш последний вариант без шаблонов?

Он с шаблонами, я имел в виду, что отсечение не нужных файлов производится опцией prune, а не самим шаблоном.
...
Рейтинг: 0 / 0
Копирование файлов.
    #35997242
avb1003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen...
Вот команда rm дружит ...
Вы таки проверили это ? Попробуйте
Код: plaintext
1.
2.
3.
4.
5.
mkdir test
cd test
touch f1 f2
rm f3
rm '*'
wessen...
Так находятся все файлы и скрытые тоже.
Не знаю. У меня работает(bash-3.2.48+ find-4.4.0 или bash-2.05+find-4.1.7):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
$ mkdir -p test/d1
$ cd test
$ touch d1/.f1
$ touch d1/f1
$ find -name "[!.]*"
./d1
./d1/f1
vessen
Пытался так
Код: plaintext
find|grep -v ".*"
, но ничего не находилось.
Естественно. Шаблон ".*" означает произвольный символ повторенный произвольное число раз.
Вот если набрать "\..*", то тогда можно найти все файлы без точки, если искать так:
Код: plaintext
1.
find `pwd` |  grep -v "\..*"
vessel
то есть все пути начинаются с точки и отсекается соответственно все. В общем, если кто-то подскажет, как убрать ведущие символы ./ из вывода команды find, буду очень признателен.
... См. предыдущий мой примерvessel
...
Он с шаблонами, я имел в виду, что отсечение не нужных файлов производится опцией prune, а не самим шаблоном. Странно, что Вы не поняли как работает опция -prune. Последний Ваш вариант был хорошим примером ee применения.
...
Рейтинг: 0 / 0
Копирование файлов.
    #35998494
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avb1003
find `pwd` | grep -v "\..*"


Я кажется понял, в чем я тупил.
Для опции name команды find передается некий shell pattern, а вот для grep передается именно полноценное регулярное выражение. Оно так?
...
Рейтинг: 0 / 0
Копирование файлов.
    #36000270
avb1003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenavb1003
find `pwd` | grep -v "\..*"


Я кажется понял, в чем я тупил.
Для опции name команды find передается некий shell pattern, а вот для grep передается именно полноценное регулярное выражение. Оно так?Примерно так. Но точнее: параметры опций типа -name, рассматриваются (программой find) как shell pattern,
а шаблон команды gnu grep по умолчанию трактуется/рассматривается(программой grep) как "basic regular expression",
а с опцией -E как "extended regular expression".
В других UNIХ-ах для "extended regular expression" существует(или существовала) отдельная команда
egrep. Была еще fgrep (grep -F). Все это разные диалекты языка регулярных выражений. Свои версии
(диалекты) имеют perl, awk, tcl и т.д.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Копирование файлов.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]