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

В настоящее время я пытаюсь 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 / и, следовательно, копирует его содержимое, включая каталоги, начиная с '_'.

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

Спасибо,

Паскаль

10
задан 21 June 2012 в 00:01

2 ответа

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

0
ответ дан 21 June 2012 в 00:01

Изменить с:

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

на:

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

Таким образом, /source/path/with/directories не будет включен.

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

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

0
ответ дан 21 June 2012 в 00:01

Другие вопросы по тегам:

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