Ищу скрипт для создания жестких ссылок hardlink
Отсюда вопрос, скорее просьба к умельцам - ищется скрипт, который можно повесить на ПКМ, и который будет делать следующее -
1. выделенный директорий в каком-то месте = создает новый директорий и в этот новый директорий кладет жесткие ссылки на все, что внутри выделенного дир.
2. Сценарий для вложенности - видимо такой же
3. если выделена группа файлов без директориев - просто хардлинки
Если есть готовые решения, которые я не нашел, пожалуйста ткните носом.
Ну, тем не менее примерно так:
find . -type d -exec mkdir /path/{} \;
find . -type f -exec ln {} /path/{} \;
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE
Хм, если файлу хардлинк создать - он куда-то "самоорганизуется"?lnx: Организация хранения файлов проектов. По годам, по темам, и т.д.
За все время пользования ПК даже мысли не было что-то творить с хардлинками.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE
Также, как и симлинк - нет, не организзуется. Дальше переношу в другое место.ALiEN: Хм, если файлу хардлинк создать - он куда-то "самоорганизуется"?
На примере - вот в 2025 делаю .... шкаф, у него директорий с фотографиями и чертежами. Он должен отображаться в Пректы-2025-Шкаф такой-то. Также в Проекты-Мебель-Шкафы_и_пр_крупное-.
Аналогично с материалами Библиотеки - там масса ветвлений по направлениям, видам и есть пересечения.
Симлинк при перемещении первичного объекта ломается, а за десятилетия перемещений хватало, менялась структура и пр. И наверняка изменения не последние.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE
Хардлинки не переносятся между разными ФС, дисками и разделами. На одной ФС конечно можно что-то выдумывать, но, по сути своей, абсолютно бессмысленно.lnx:Дальше переношу в другое место.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE
mkdir $1_
find $1 -type d -exec mkdir $1_{} \;
find $1 -type f -exec ln {} $1_{} \;
Но нет успеха, передавемый во второй раз {} полный путь к найденному приводит к аборту. В $1 от thunar и иже с ним в %d or %D передается параметр "полный путь к директорию" или только его имя. А во втором случае из {} нам надо оставить только часть после переданного в $1 пути. Как?
полностью согласен с ...lnx:Организация хранения файлов проектов. По годам, по темам, и т.д.
Но если нужно просто скопировать только уже имеющиеся hardlink новую директорию, то сначала нужно найти эти hardlinkALiEN:Как по мне - проще забекапить сурс, и потом раскидать оригиналы по папкам. Cамое простое решение
find -type f -links +1 -printf '%i %p\n'
671140 ./test.txt
671140 ./hardlink_test.txt
или
find -type f -links +1 -printf '%i %c %p\n'
671140 Sun Aug 3 11:51:58.9924085490 2025 ./test.txt
671140 Sun Aug 3 11:51:58.9924085490 2025 ./hardlink_test.txt
или в файл
find -type f -links +1 -printf '%i %c %p\n' > ~/file.txt
… и потом перенести нужные новую директорию
PS - Особенности: если удалить файл, на который создана жёсткая ссылка, она продолжит работать, так как ссылается на inode, существующий в файловой системе. Полное удаление файла произойдёт только после того, как будут удалены все его жёсткие ссылки.
Ошибки не исчезают с опытом - они просто умнеют
Сперва надо хардлинки создать, и необходимые для них директории тоже.vasek: Но если нужно просто скопировать только уже имеющиеся hardlink новую директорию, то сначала нужно найти эти hardlink
PS - Особенности: если удалить файл, на который создана жёсткая ссылка, она продолжит работать, так как ссылается на inode, существующий в файловой системе. Полное удаление файла произойдёт только после того, как будут удалены все его жёсткие ссылки.
Именно из-за этого лично для меня они и ценны. Для примера - симлинки в разных файловых манагерах от оригиналов могу отличаться не броско и я как-то по ошибке удалил ценную картинку прототипа, которую, несмотря на татаническую работу по повторному поиску, так и не смог больше найти. Я не Чингачкук, но на грабли стараюсь наступать единожды.
В снапшоте btrfs лежал бы нужный файл, при вовремя сделанном снапшоте.lnx: и я как-то по ошибке удалил ценную картинку прототипа, которую, несмотря на татаническую работу по повторному поиску, так и не смог больше найти. Я не Чингачкук, но на грабли стараюсь наступать единожды.
В btrfs, файл физически не удаляется, пока он есть хоть водном снапшоте.
Arch Linux x86-64 на BTRFS
https://t.me/arch_linuxru
lnx:ну это просто скопирует рекурсивно директорий с линками как файлами. Не то. Нам не нужно дублирование одних и тех же файлов. Нам нужен Фигаро.Arhei:cp -lr dir1 dir2
$ cp --help | grep -e '--link'
-l, --link создавать жёсткие ссылки вместо копирования
$ mkdir -p test/{d1,d2}
$ echo 1 > test/d1/f.txt
$ echo 2 > test/d2/f.txt
$ tree --inodes -i test/
[ 119] test/
[ 120] d1
[ 122] f.txt
[ 121] d2
[ 123] f.txt
$ cp -lr test test2
$ $ tree --inodes -i test2/
[ 151] test2/
[ 152] d1
[ 122] f.txt
[ 153] d2
[ 123] f.txt
тока в кавычки возьмите, а то если вдруг пробел в названии будет нехорошоlnx:Блестяще, большое спасибо за тык носом (в мой профналет) и помощь! -Arhei: $ cp --help | grep -e '--link' -l, --link создавать жёсткие ссылки вместо копирования
#!/usr/bin/env bash cp -lr $1 $1_