Копировать файлы из одного каталога в существующий каталог - PullRequest
211 голосов
/ 05 сентября 2010

В bash мне нужно сделать следующее:

  1. взять все файлы в каталоге

  2. скопировать их в существующий каталог

Как мне это сделать?Я попытался cp -r t1 t2 (и t1, и t2 - существующие каталоги, в t1 есть файлы), но он создал каталог с именем t1 внутри t2, я не хочу этого, мне нужны файлы в t1, чтобы перейти непосредственно в t2.Как мне это сделать?

Ответы [ 7 ]

346 голосов
/ 10 января 2011

То, что вы хотите:

cp -R t1/. t2/

Точка в конце говорит ему скопировать содержимое текущего каталога, а не самого каталога.Этот метод также включает скрытые файлы и папки.

31 голосов
/ 17 октября 2012

Если вы хотите скопировать что-либо из одного каталога в каталог current , сделайте следующее:

cp dir1/* .

Предполагается, что вы не пытаетесь копировать скрытые файлы.

28 голосов
/ 05 сентября 2010
cp dir1/* dir2

Или если у вас есть каталоги внутри dir1, которые вы также хотите скопировать

cp -r dir1/* dir2
8 голосов
/ 15 ноября 2018

Предполагается, что t1 - это папка с файлами, а t2 - пустой каталог.То, что вы хотите, выглядит примерно так:

sudo cp -R t1/* t2/

Помните, для первого примера, t1 и t2 должны быть полными путями или относительными путями (в зависимости от того, где вы находитесь).Если вы хотите, вы можете перейти к пустой папке (t2) и сделать это:

sudo cp -R t1/* ./

Или вы можете перейти к папке с файлами (t1) и сделать это:

sudo cp -R ./* t2/

Примечание. Знак * (или подстановочный знак) обозначает все файлы и папки.Флаг -R означает рекурсивно (все внутри всего).

3 голосов
/ 05 сентября 2010
cp -R t1/ t2

Конечная косая черта в исходном каталоге немного меняет семантику, поэтому копирует содержимое, но не сам каталог. Это также позволяет избежать проблем с глобализацией и невидимыми файлами, которые есть в ответе Бертрана (копирование t1/* пропускает невидимые файлы, копирование `t1 / * t1 /.* 'копий t1 /. И t1 / .., которые вам не нужны). .

2 голосов
/ 05 сентября 2010

В зависимости от некоторых деталей, вам может потребоваться сделать что-то вроде этого:

r=$(pwd)
case "$TARG" in
    /*) p=$r;;
    *) p="";;
    esac
cd "$SRC" && cp -r . "$p/$TARG"
cd "$r"

... это в основном изменится на каталог SRC и скопирует его в целевое устройство, а затем вернется к тому, откуда вы начали.

Дополнительное беспокойство заключается в обработке относительных или абсолютных целей.

(Это не зависит от тонкой семантики самой команды cp ... о том, как она обрабатывает спецификации источника с помощьюили без трейлинга / ... так как я не уверен, что они стабильны, переносимы и надежны за пределами GNU cp, и я не знаю, будут ли они продолжаться в будущем).

0 голосов
/ 24 апреля 2019

Внутри какого-то каталога это будет использоваться full, так как копирует все содержимое из «folder1» в новый каталог «folder2» внутри некоторого каталога.

$ (pwd) получит путь для текущего каталога.1003 *

Обратите внимание на точку (.) После папки1, чтобы получить все содержимое внутри папки1

cp -r $(pwd)/folder1/. $(pwd)/folder2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...