zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
Добрый день. Хочу делать hardlink на директорию с множеством вложенных каталогов. РЕШЕНО - Уважаемые форумчане подсказали куда смотреть в мануалах. cp -rl копирует структуру каталога и создает hardlink вместо файлов. rsync имеет сходный функционал. Rsnapshot по ряду причин не подходит. Лобовое ln -d TARGET_DIR LINK_NAME не работает. Придумалось делать копию directiry tree rsync.exe -av -f“+ */” -f“- *” /source /destination потом получать абсолютные пути к всем файлам и делать линки find /source -type f каким то образом изменять в полученном пути source на destination и делать ln писать отдельную “продцедуру” по подмене - не изящно, чтоли. очень понравилась мысль про -exec find /source -type f -name * -exec ln {} –target-directory=/destination \; но в этом случае все линки складываются в /destination без соблюдения вложенных директорий. можно ли задачу по созданию hardlink файлов с вложенными каталогами решить силами find или придется получать список путей, делать новый список и пропускать через цикл ln, подставляя сформированные пути в новом каталоге? |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
Жесткие ссылки на каталоги запрещены, никакие обычные утилиты создать их вам не позволят. Однако, вместо этого вы можете использовать монтирование каталога в каталог :) man mount |
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
не понимаю, что монтирование мне может дать мне нужно иметь именно hardlink к файлам со всеми вытекающими. например есть папка 1, где лежат 2 файла и папка 2, где лежат 2 хардлинка на файлы из папки 1 файл из каталога 1 удаляется, но есть хардлинк в папке 2. файл из каталога 1 изменяется, изменяется “файл” в папке 2 |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
Тогда объясните толком, чего хотите :) При замене файла, на который есть хардлинк, вы получите ДВА файла – один старый по другому адресу, и один новый там, где заменяли. Если вам нужен именно этот эффект – вам остаётся создавать хардлинки на каждый файл, или собирать ядро с aufs/unionfs. Впрочем, это не гарантирует, что файлов будет два – если файл не будет заменён, а вместо этого будет перезаписан – он изменится везде. Если же вам как раз нужно, чтобы при замене файл заменялся везде, то подойдёт именно монтирование, которое будет иметь тот же эффект, что и хардлинк на каталог. |
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
Natrio в целом мне нужна кроссплатформенная (cygwin) консольная time machine ) *вы получите ДВА файла – один старый по другому адресу, и один новый там, где заменяли. Если вам нужен именно этот эффект – вам остаётся создавать хардлинки на каждый файл* - именно это. ядро модифицировать нет возможности. хардлинки на каждый файл - вот что меня останавливает. пока только и есть в мыслях - получать полные пути до файлов подменять в них sorce folder на destination folder и делать ln на каждый файл. кириллица и пробелы в названии файлов - привет ( find /source -type f -exec ln {} `здесь надо как то превратить sorce folder в destination folder внутри пути {}` \; вроде даже получилось, в каталоге bbbb создать ссылки на файлы из каталога aaaa (при условии что в каталоге bbbb есть копия directory tree из aaaa) find aaaa/ -type f -exec sh -c 'ln {} `echo {} | sed -e 's/aaaa/bbbb/g'`' \; [[email protected] tmp]$ stat bbbb/12/1111/112.txt File: ‘bbbb/12/1111/112.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 804h/2052d Inode: 2628400 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 1000/ shka) Gid: ( 100/ users) Access: 2012-09-02 17:59:51.487718929 +0400 Modify: 2012-09-02 17:59:51.487718929 +0400 Change: 2012-09-02 18:03:53.643073728 +0400 Birth: - ЗЫ осталось порешать кириллицу и пробелы в файлах ЗЫЫ, кириллица в файлах работает нормально. но вот пробелы ни хотят ЗЫЫЫ ага, c пробелами в именах работает вот так find aaaa/ -type f | while read i; do ln "$i" "`echo $i | sed -e 's/aaaa/bbbb/g'`"; done |
kurych |
|
Темы:
0
Сообщения:
1394
Участник с: 06 ноября 2011
|
Опция "-l" команды cp как раз вместо обычного копирования делает хардлинки. Присмотритесь к ней. В сочетании с опцией “-r” просто обсоздавайтесь этих хардлинков. В rsync тоже есть такой функционал. UPD: Здесь варианты велосипедов. |
sleepycat |
|
Темы:
98
Сообщения:
3291
Участник с: 19 июля 2011
|
про рсинс да, подтвержу, но показалось что ТС хочеть свой велик сделать. Я думаю дать переменных в скрипте и тоже можно без столпотворения обойтись при “выделении имен”, ну или сократить немного.
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
|
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
cp -l - то что нужно! спасибо kurych не надо никаких велосипедов )) |
sleepycat |
|
Темы:
98
Сообщения:
3291
Участник с: 19 июля 2011
|
ведет себя также, т.е. создает диры а файлы хардлинкает?
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
|
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
stat уверяет что cp -rl делает все как надо. копирует директории и создает hardlink на файлы. это просто восхитительно ) |