есть каталог со сложной структурой вложенных папок, необходимо скопировать все в одну папку, все файлы и каталоги должны быть в корне этой папки. Подскажите пож-ста синтаксис команды cp.
Cp: сложное копирование файлов
т.е. cp -vR /dir/* /dir2/ не катит уже?
В крайнем случае всегда есть mc :cool:
спасибо за совет, но вот выполняю:
cp -vR ./* ~/share2/books/
а копируется все с папками, как и в исходном каталоге :(
teseii, ну все правильно, * - это копировать все включая каталоги, так как есть. А так вам надо сделать листинг, а потом парсить, что копировать и куда =)
find на пару с cp способны произвести нужный эффект.
i2ks, звучит довольно-таки сложно, нельзя ли одной командой сделать? mc поставил, как его использовать для сабжа - не понял.
mc поставил, как его использовать для сабжа - не понял.
Хм. Странно вообще. Пометь файлы которые нужно скопировать и нажми F5 [Copy]
Или я чего-то не понимаю или вы не можете реально описать задачу.
а копируется все с папками, как и в исходном каталоге
как бы в задаче было:
необходимо скопировать все в одну папку, все файлы и каталоги должны быть в корне этой папки.
Вроде нужный результат уже был достигнут. oO
могу и ошибаться, но вот:
find /dir1/ -type f -exec cp -P "{}" /dir2/ ";"
Еще раз о задаче: есть over 9000 файлов, рассованых по over 9000 каталогов, уровень вложенности - 5. Нужно скопировать все файлы в одну папку. Можно копировать и в мс, но сломаются пальцы и глаза. Могу написать программу, но зачем изобретать велосипед?
попробовал по совету bormant объединить find и cp, получился такой монстр:
find ./ -name *.zip -type f -print | xargs cp ./
на что мне пишет:
cp: указанная цель «Мага.fb2.zip» не является каталогом
teseii, так попробуйте: http://linuxforum.ru/viewtopic.php?pid=209489#p209489 =)
урррррррррряяя, заработало!
find ./ -name *.zip -type f -exec cp -P "{}" ./ ";"
всем спасибо, i2ks - в особенности! ;)
всем спасибо, i2ks - в особенности!
ну это ты bormant, скажи спасибо, он подсказал =)
всем участникам - в любом случае :)
Ну, и на случай Zip, ZIP и сотоварищи, предпочтительнее
... -iname *.zip ...
Если не только zip, но все подряд, можно этот предикат совсем убрать...
есть ещё задачка по теме:
нужно скопировать из поддиректории в заданную все директории, максимальная глубина вложенности которых 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.
может кто подскажет простое и красивое решение... ??
Не то чтобы скопировать, но структуру каталогов создаст
find . -maxdepth 2 -type d -exec mkdir /target/dir/'{}' \;
небольшое уточнение: для 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:
ojO,
докажете примером необходимость '-p' -- соглашусь.
Докажете?
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