cp -r без скрытых файлов

89

У меня два каталога и один пустой.

В первом каталоге есть много подкаталогов со скрытыми файлами. Когда я cp -rперехожу из первого каталога во второй, скрытые файлы тоже копируются. Какие-нибудь решения, чтобы избежать их?

Рахул
источник
это выполнимо, но удалить их после копии может быть проще
Кароли Хорват
6
да, но в моем случае копирование скрытых файлов в другие места представляет собой угрозу безопасности.
Rahul

Ответы:

127

Вы можете использовать rsync:

rsync -av --exclude=".*" src dest
Евгений Ярмаш
источник
1
Какие-либо накладные расходы по сравнению с cp?
Rahul
2
@Rahul Мне не приходило в голову провести сравнительный анализ, но я думаю, вам не стоит об этом беспокоиться
Евгений Ярмаш
3
Работает круто! Спасибо чувак! Для информации, rsync будет отличным решением, когда размер файла большой, но равен cp в случае файлов меньшего размера.
Rahul
26

Ты можешь сделать

cp -r SRC_DIR/* DEST_DIR

чтобы исключить все файлы .files и .dirs на уровне SRC_DIR, но при этом все скрытые файлы будут скопированы в подкаталоги следующего уровня.

Tuxdude
источник
6
Именно в этом-то и проблема .. :)
Рахул
9
Но это работает для GIT-Repos, если вы не хотите копировать весь GIT-Index в .git / ...
Седат Килинч
1
Я + дал этот ответ, потому что это решение, которое я искал. Я не хочу исключать все невидимое наверху дерева, только невидимое на корневом уровне!
l008com
Другой вариант cp SOURCE/[!.]* TARGET.
Карел
4

rsync имеет параметр "-C"

http://rsync.samba.org/ftp/rsync/rsync.html

Пример:

rsync -vazC  dir1 dir2
слитвинов
источник
Ты прав. Я пробовал mkdir -p dir1 / subdir; коснитесь dir1 / subdir / .cvs; rsync -avzC dir1 dir2
slitvinov
rsync -av --exclude = ". *" src dest отлично работает. См. Ответ Евгения выше. Спасибо, в любом случае! :)
Rahul