В настоящее время я пытаюсь 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 / и, следовательно, копирует его содержимое, включая каталоги, начиная с '_'.
У кого-нибудь есть подсказка, почему это так?
Спасибо,
Паскаль
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
Изменить с:
find /source/path/with/directories ...
на:
(shopt -s dotglob; find /source/path/with/directories/* ... )
Таким образом, /source/path/with/directories
не будет включен.
shopt -s dotglob
таков, что *
также будет сопоставлять файлы и каталоги, начиная с .
(скрытые файлы, каталоги).
И все это завернуто в суб-оболочку с (...)
, чтобы ограничить эффект shopt
только внутри суб-оболочки, в противном случае вам придется отменить это позже с shopt -u dotglob
.