1

есть каталог со сложной структурой вложенных папок, необходимо скопировать все в одну папку, все файлы и каталоги должны быть в корне этой папки. Подскажите пож-ста синтаксис команды cp.

2

т.е.  cp -vR /dir/* /dir2/ не катит уже?

It is good day to die ...
MS Windows 10
Заметки о главном...

3

В крайнем случае всегда есть mc  :cool:

Диагноз: Gentoo'шник в стадии ремиссии. Лечению не поддаётся.

4

спасибо за совет, но вот выполняю:
cp -vR ./* ~/share2/books/
а копируется все с папками, как и в исходном каталоге ac

5

teseii, ну все правильно, * - это копировать все включая каталоги, так как есть. А так вам надо сделать листинг, а потом парсить, что копировать и куда =)

It is good day to die ...
MS Windows 10
Заметки о главном...

6

find на пару с cp способны произвести нужный эффект.

7

i2ks, звучит довольно-таки сложно, нельзя ли одной командой сделать? mc поставил, как его использовать для сабжа - не понял.

8

teseii пишет:

mc поставил, как его использовать для сабжа - не понял.

Хм. Странно вообще. Пометь файлы которые нужно скопировать и нажми F5 [Copy]
Или я чего-то не понимаю или вы не можете реально описать задачу.

teseii пишет:

а копируется все с папками, как и в исходном каталоге

как бы в задаче было:

teseii пишет:

необходимо скопировать все в одну папку, все файлы и каталоги должны быть в корне этой папки.

Вроде нужный результат уже был достигнут.  oO

Диагноз: Gentoo'шник в стадии ремиссии. Лечению не поддаётся.

9 (06.09.2011 15:17:34 отредактировано i2ks)

могу и ошибаться, но вот:
find /dir1/ -type f -exec cp -P "{}" /dir2/ ";"

It is good day to die ...
MS Windows 10
Заметки о главном...

10

Еще раз о задаче: есть over 9000 файлов, рассованых по over 9000 каталогов, уровень вложенности - 5. Нужно скопировать все файлы в одну папку. Можно копировать и в мс, но сломаются пальцы и глаза. Могу написать программу, но зачем изобретать велосипед?

попробовал по совету bormant объединить find  и cp, получился такой монстр:
find ./ -name *.zip -type f -print | xargs cp ./
на что мне пишет:
cp: указанная цель «Мага.fb2.zip» не является каталогом

11

teseii, так попробуйте: http://linuxforum.ru/viewtopic.php?pid=209489#p209489 =)

It is good day to die ...
MS Windows 10
Заметки о главном...

12

урррррррррряяя, заработало!

find ./ -name *.zip -type f -exec cp -P "{}" ./ ";"

всем спасибо, i2ks -  в особенности! bx

13

teseii пишет:

всем спасибо, i2ks -  в особенности!

ну это ты bormant, скажи спасибо, он подсказал =)

It is good day to die ...
MS Windows 10
Заметки о главном...

14

всем участникам - в любом случае ab

15 (06.09.2011 15:55:00 отредактировано bormant)

Ну, и на случай Zip, ZIP и сотоварищи, предпочтительнее
... -iname *.zip ...

Если не только zip, но все подряд, можно этот предикат совсем убрать...

16

есть ещё задачка по теме:

нужно скопировать из поддиректории в заданную все директории, максимальная глубина вложенности которых 2

наброски..
1. find . -type d -print | sort  # видно общую картину

# например, такую:
./1
./1/11
./2
./2/22
./3
./3/33
./3/33/333
./4
./4/44
./4/44/444
./4/44/444/4444

# по идее, нужны только ./1 и ./2 рекурсивно
# но когда копирование..

2. find .  -maxdepth 2 -type d -exec cp -pR {} /target/dir \;

# тянутся все директории, т.е. ./1/11 ./2/22 ./3/33/333 ./4/44/444/4444
# что и не удивительно, но как же выбрать нужные, а ещё исключить все файлы на путях, т.е. скопировать только структуру подкаталогов ?

3. find .  -mindepth 2  -maxdepth 2 -type d -print | sort

./1/11
./2/22
./3/33
./4/44

# ...

кстати, вот тут что-то промелькнуло по поводу «Копирование сложного дерева каталогов» (Листинг 5) , но я не врубился почему cpio, да и cpio: cannot open /target/dir: is a directory.

может кто подскажет простое и красивое решение... ??

17

Не то чтобы скопировать, но структуру каталогов создаст
find . -maxdepth 2 -type d -exec mkdir /target/dir/'{}' \;

+ ojO

18

небольшое уточнение: для mkdir тут нужен параметр -p #make parentdirectory as needed, т.е.

find . -maxdepth 2 -type d -exec mkdir -p /target/dir/'{}' \;

и если нам нужно только те, где два вложения, а не одно или больше двух, то

find . -maxdepth 2 -mindepth 2 -type d -exec mkdir -p /target/dir/'{}' \;

# ещё бы отсеять не подходящее условию...  :rolleyes:

19

ojO,
докажете примером необходимость '-p' -- соглашусь.
Докажете?

20

bormant,   smile

конкретно здесь:
find . -maxdepth 2 -type d -exec mkdir -p /target/dir/'{}' \; 
скрипт отрабатывает нармулЪ и без '-p', только одно предупреждение от mkdir
mkdir: cannot create directory `/target/dir/.': File exists;
из-за того, что find передаёт '.', соответственно в случае (без '-p'):
find . -maxdepth 2 -mindepth 2 -type d -exec mkdir /target/dir/'{}' \;
получаем сплошное ругательство
mkdir: cannot create directory `/target/dir/./../..': No such file or directory;

поэтому я и предложил '-p' #no errors if existing, make parent directory as needed  smile
ну соглашайтесь ужжже  :rolleyes:

кстати, find . -maxdepth 2 -mindepth 2 -type d | cipo -pdumv /target/dir/
корректно отрабатывает, сохраняя все права и идентификаторы

а условие задачки, все-таки, ещё не выполнено полностью...   :o

21 (09.09.2011 06:17:01 отредактировано bormant)

ojO пишет:

есть ещё задачка по теме:
нужно скопировать из поддиректории в заданную все директории, максимальная глубина вложенности которых 2

ojO пишет:

а условие задачки, все-таки, ещё не выполнено полностью...

Так не томите же ж, откройте тайное знание, что ж скрывалось между строк?

ojO пишет:

поэтому я и предложил '-p' #no errors if existing, make parent directory as needed  
ну соглашайтесь ужжже

а изволь-ка мне добыть, то чего не может быть! запиши на всякий случай, чтобы в спешке не забыть... (q)
mkdir -p /target/dir/
до find .., на случай копирования в только что бывшее никуда, а ныне осязаемое  /target/dir/.

ps. Наверное строитель, по долёвке дома строит... Главное дом скопировать, котлован можно не рыть...