как заставить 'find' не вернуть текущий каталог


11

В настоящее время я пытаюсь find(и копировать) все файлы и структуру папок, соответствующие определенному шаблону, в указанном каталоге, и я почти там!

В частности, я хочу рекурсивно копировать все папки, не начинающиеся с символа «_», по указанному пути.

find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;

В / source / path / with / directoryies / path находятся машинно-ориентированные каталоги, начинающиеся с '_' и других, и меня интересует только копирование других. По независящей от меня причине команда find возвращает каталог / source / path / with / directoryies / и, следовательно, копирует его содержимое, включая каталоги, начинающиеся с _.

У кого-нибудь есть подсказка, почему это так?

Спасибо,

паскаль


Ответы:


14

findвозвращает корневой путь, потому что он соответствует вашим критериям - то есть это каталог, и он не начинается с _.

Вы ищете -mindepth 1, я подозреваю:

$ cd /tmp
$ mkdir a
$ touch a/b
$ mkdir a/c
$ touch a/c/d
$ find a
a
a/b
a/c
a/c/d
$ find a -mindepth 1
a/b
a/c
a/c/d

Ссылка: найти справочную страницу


Отлично! работает как я хотел. У меня было это работает, добавив! Назовите «файлы», но мне это показалось неправильным ...
Pinpin

0

Меняться от:

find /source/path/with/directories ...

чтобы:

(shopt -s dotglob; find /source/path/with/directories/* ... )

Этот способ /source/path/with/directoriesне будет включен.

Это shopt -s dotglobтак, что *также будет сопоставлять файлы и каталоги, начиная с .(скрытые файлы, каталоги).

И все это заключено в под-оболочку, (...)чтобы ограничить эффект shoptтолько внутри под-оболочки, иначе вам придется отменить это позже shopt -u dotglob.


Это не удастся для записей каталога, которые начинаются с .. Не пытайтесь .*, или вы будете соответствовать целому ряду других вещей, которые вы никогда не намеревались. ;-)
zigg

Хороший вопрос, обновил ответ, добавил с помощью shopt.
Janos
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.