URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 91745
[ Назад ]

Исходное сообщение
"Как скопировать дерево директорий без файлов?"

Отправлено universite , 10-Июн-11 15:49 
Имеется огромная файлопомойка.
Нужно скопировать в другое место только скелет директорий, без содержащихся там файлов.
Причем некоторые директории в виде симлинков.

в rsync писать огромный список запрещенных расширений?


Содержание

Сообщения в этом обсуждении
"Как скопировать дерево директорий без файлов?"
Отправлено anonymous , 10-Июн-11 16:09 
> Имеется огромная файлопомойка.
> Нужно скопировать в другое место только скелет директорий, без содержащихся там файлов.
> Причем некоторые директории в виде симлинков.

1.убрать права на чтение с файлов: chmod -r $(find /path/dir -type f)
2.скопировать cp -r /path/dir /path/to
3.вернуть права см. п1


"Как скопировать дерево директорий без файлов?"
Отправлено universite , 10-Июн-11 16:36 
>> Имеется огромная файлопомойка.
>> Нужно скопировать в другое место только скелет директорий, без содержащихся там файлов.
>> Причем некоторые директории в виде симлинков.
> 1.убрать права на чтение с файлов: chmod -r $(find /path/dir -type f)

Файлов слишком много ~ больше 100М
отрабатывать будет очень долго
Файлопомойкой активно пользуются.

> 2.скопировать cp -r /path/dir /path/to
> 3.вернуть права см. п1


"Как скопировать дерево директорий без файлов?"
Отправлено JL2001 , 10-Июн-11 16:21 
я как раз борюсь с проблемой как tar с параметром -N убедить не ложить пустые директории в архив (в которых все файлы оказываются старше чем дата) - у меня получается весь архив из пустых директорий если все файлы старше даты

"Как скопировать дерево директорий без файлов?"
Отправлено gpl77 , 10-Июн-11 16:27 
> Имеется огромная файлопомойка.
> Нужно скопировать в другое место только скелет директорий, без содержащихся там файлов.
> Причем некоторые директории в виде симлинков.
> в rsync писать огромный список запрещенных расширений?

mtree есть в *bsd


"Как скопировать дерево директорий без файлов?"
Отправлено langator , 10-Июн-11 17:09 
можно таким скриптом
cd /path/to/dir; for item in `find . -type d -o -type l`; do mkdir /path/to/copydir/"$item"; done

"Как скопировать дерево директорий без файлов?"
Отправлено Andrey Mitrofanov , 10-Июн-11 17:14 
> for item in `find . -type d

На большой Ф-помойке и в зависимости от шела может "не влезть" в [ограниченную] ком.строку при расширении. Хотя, может, я и придумываю что.



"Как скопировать дерево директорий без файлов?"
Отправлено universite , 10-Июн-11 17:55 
>> for item in `find . -type d
> На большой Ф-помойке и в зависимости от шела может "не влезть" в
> [ограниченную] ком.строку при расширении.

Плюс зоопарк кодировок и спецсимволов.


"Как скопировать дерево директорий без файлов?"
Отправлено Andrey Mitrofanov , 10-Июн-11 17:10 
> Имеется огромная файлопомойка.
> Нужно скопировать в другое место только скелет директорий, без содержащихся там файлов.
> Причем некоторые директории в виде симлинков.
> в rsync писать огромный список запрещенных расширений?

( cd $from_dir/; find \! -type f ) | cpio -padmu $to_dir/

Симлинки просто скопируются: с путями в них (относительные/абсолютные) и ссылками на файлы нужно разбираться отдельно.

Просто только директории (дерево) пересоздать:

( cd $from_dir/; find -type d ) | ( cd $to_dir; xargs mkdir )

---Нет, не проверял.


"Как скопировать дерево директорий без файлов?"
Отправлено universite , 10-Июн-11 17:56 

> Просто только директории (дерево) пересоздать:
> ( cd $from_dir/; find -type d ) | ( cd $to_dir; xargs
> mkdir )

выглядит красиво

> ---Нет, не проверял.

щас проверю на тестовом дереве.


"Как скопировать дерево директорий без файлов?"
Отправлено universite , 10-Июн-11 18:12 
>> Просто только директории (дерево) пересоздать:
>> ( cd $from_dir/; find -type d ) | ( cd $to_dir; xargs
>> mkdir )
> выглядит красиво
>> ---Нет, не проверял.
> щас проверю на тестовом дереве.


( cd $from_dir/; find . -type d ) | ( cd $to_dir; xargs -0 mkdir )

Вываливается список директорий:


./Saint-Preux/To Be Or Not 1980
./Saint-Preux/Concerto Pour Une Voix 1969
./Saint-Preux/Le piano d'Abigail 1983
./Saint-Preux/Concerto pour piano 1977
./Saint-Preux/_Le_piano_sous_la_merLaMer 1972
./Saint-Preux/Invitation In Paris 1987
./Saint-Preux/Samara 1976
./Saint-Preux/YOUR HAIR & MISSA AMORIS 1975
./Camel
./Camel/Harbour Of Tears - 1996
./Turandot Puccini
./smislovie_galucinacii
./smislovie_galucinacii/Obratnaya_Storona_Zemli
./smislovie_galucinacii/Bol'shie_plany
: File name too long


"Как скопировать дерево директорий без файлов?"
Отправлено JohnProfic , 10-Июн-11 22:05 
>
 
> ( cd $from_dir/; find . -type d ) | ( cd $to_dir; xargs -0 mkdir )
>

Митрофаныч забыл -print0

 
( cd $from_dir/; find . -type d -print0 ) | ( cd $to_dir; xargs -0 mkdir )


"Как скопировать дерево директорий без файлов?"
Отправлено universite , 10-Июн-11 18:13 
>> Имеется огромная файлопомойка.
>> Нужно скопировать в другое место только скелет директорий, без содержащихся там файлов.
>> Причем некоторые директории в виде симлинков.
>> в rsync писать огромный список запрещенных расширений?
> ( cd $from_dir/; find \! -type f ) | cpio -padmu $to_dir/


cpio: Couldn't stat "./smislovie_galucinacii/Bol'shie_plany/09._Aprel'.mp3": No such file or directory
cpio: Couldn't stat "./smislovie_galucinacii/Bol'shie_plany/04._Za_shirmami.mp3": No such file or directory
cpio: Couldn't stat "./smislovie_galucinacii/Bol'shie_plany/02._CHernaya.mp3": No such file or directory
cpio: Couldn't stat "./smislovie_galucinacii/Bol'shie_plany/03._Do_vstrechi.mp3": No such file or directory
cpio: Couldn't stat "./smislovie_galucinacii/Bol'shie_plany/wget-log": No such file or directory
cpio: Couldn't stat "./smislovie_galucinacii/Bol'shie_plany/music.wget": No such file or directory
cpio: Couldn't stat "./Saint-Preux[torrents.ru].torrent": No such file or directory
0 blocks


"Как скопировать дерево директорий без файлов?"
Отправлено universite , 10-Июн-11 18:58 
> Имеется огромная файлопомойка.
> Нужно скопировать в другое место только скелет директорий, без содержащихся там файлов.
> Причем некоторые директории в виде симлинков.
> в rsync писать огромный список запрещенных расширений?

Оказалось проще:


rsync -av --include='*/' --exclude='*' source destination

Осталось сделать, чтоб симлинки корректно пересоздавались


"Как скопировать дерево директорий без файлов?"
Отправлено shadow_alone , 11-Июн-11 05:11 
Пара вариантов:

cd /new/folder
(cd /old/folder; find -type d ! -name .) | xargs mkdir

и

cd /old/folder
find . -type d ! -name . -exec mkdir /new/folder/{} \;