Как я могу сделать cp -r
копию абсолютно всех файлов и каталогов в каталоге
Требования:
- Включите скрытые файлы и скрытые каталоги.
- Будьте одной командой с флагом, чтобы включить выше.
- Не нужно полагаться на сопоставление с образцом вообще.
Мой некрасивый, но работающий хак это:
cp -r /etc/skel/* /home/user
cp -r /etc/skel/.[^.]* /home/user
Как я могу сделать все это в одной команде без сопоставления с образцом? Какой флаг мне нужно использовать?
Ответы:
Не указывайте файлы:
(Обратите внимание, что он
/home/user
не должен уже существовать, иначе он будет создан/home/user/skel
.)источник
/home/user/skel
оно существует?-T
(без цели) ниже для правильного использования. (-rT
дляДопустим, вы создали новую папку (или собираетесь ее создать) и хотите скопировать в нее файлы после ее создания.
Это позволит рекурсивно скопировать все файлы / папки из
/etc/skel
уже существующей папки, созданной в первой строке.источник
.
, это поведение потребует от него создания уже существующего каталога, поэтому он просто пропускает этот шаг..
, чтобы изменить то, что вам нужно использоватьshopt -s dotglob
команду перед тем, как включать эти файлы. Таким образом*
, по умолчанию вы запрашиваете рекурсивное копирование всех файлов из этого каталога, который можно расширить с помощью*
(который по умолчанию не содержит скрытых файлов). В то время как на другом конце.
вы используете cp для рекурсивного копирования всего из «этого каталога».Правильный способ сделать это - использовать эту
-T (--no-target-directory)
опцию и рекурсивно копировать папки (без конечных слешей, звездочек и т. Д.), То есть:Это скопирует содержимое
/etc/skel
в/home/user
(включая скрытые файлы), создав папку,/home/user
если она не существует; однако эта-T
опция предотвращает/etc/skel
копирование содержимого в новую папку,/home/user/skel
если папка/home/user
существует.источник
bash
сама имеет хорошее решение, оно имеетshell option
, Вы можетеcp
,mv
и так далее .:а также
Выше решение является стандартом
bash
НОТА:
источник
setopt
для Zsh, на случай, если кому-то еще интересно.Используйте rsync:
rsync -rtv source_folder/ destination_folder/
источник
rsync
это хорошо, но другой выбор:Из основной справки:
источник
Если ваш исходный и целевой каталог имеют одно и то же имя, даже если целевой каталог существует, вы можете просто набрать:
Это скопирует каталог / etc / skel в / home /, включая скрытые файлы и каталоги.
В конце концов, вы можете скопировать каталог и переименовать его в одну строку:
источник
cp -r /etc/skel /home/user
для переименованияskel
вuser
...Вы можете использовать rsync.
Вы даже можете скопировать через SSH
Существуют различные флаги, которые вы можете использовать: -a, --archive # archive (-rlptgoD)
Страница руководства Rsync
источник
Самый простой способ:
Выражение
{.,}*
включает все файлы и каталоги (также начинающиеся с точки).Если вы не хотите использовать вышеприведенное выражение, вы можете использовать
cp
свойство, которое позволяет указывать несколько источников для одной целевой папки:источник
..anything
или...anything
др. - stackoverflow.com/a/31438355/2351568 содержит правильное регулярное выражение для этой проблемы. || но в любом случае использованиеshopt -s dotglob
- все еще лучшее решение!.
и..
(что эквивалентно текущей и содержащей ее папке). || но все же ответ в ссылке объясняет это дальше и предоставляет решение.Обратите внимание, что есть хитрость командной строки (работает, по крайней мере, в sh , bash и ksh ): просто добавьте суффикс к каталогу from . Это выльет содержимое каталога from в каталог to (по иронии судьбы я впервые узнал об этом приеме при использовании rsync ).
Пример:
источник
Я пришел сюда с Googled для решения той же проблемы, а потом понял, что это легко сделать с помощью find. Преимущество это не зависит от оболочки или специальных утилит, которые могут быть не установлены.
Я попробовал трюк с косой чертой, но это не сработало для меня.
источник
Мое решение этой проблемы, когда мне нужно скопировать все файлы (включая
.
файлы) в целевой каталог с сохранением разрешений : (перезаписать, если уже существует)yes
предназначен для автоматической перезаписи файлов назначения,r
рекурсивного,v
многословного,p
сохранения разрешений.Обратите внимание, что исходный путь не заканчивается на
/
(поэтому все файлы / каталог и. Файлы скопированы)Каталог назначения заканчивается тем,
/
что мы помещаем содержимое исходной папки в место назначения в целом.источник
Я видел, что cp не всегда копирует скрытые файлы, и если вам нужна команда, которая работает на всех диалектах Linux / Unix, вы должны попробовать использовать:
источник
Начиная как минимум с K3b 2.0.3, при добавлении каталога в проект появляется окно вопроса, в котором спрашивается, хотите ли вы включить скрытые файлы ... также появляется вопрос, который нужно задать о включении ссылки. Хорошие вещи!
источник