Ищу скрипт для создания жестких ссылок hardlink

Браузеры, почтовые клиенты, офисные пакеты, файловые менеджеры, редакторы и т.п.
Ответить
lnx
Сообщения: 224
Зарегистрирован: 24.08.2022

#

Коллеги, прелесть оных я оценил с 90-х. Обычные гуишные решения из избегают, штатно предлагает только pcmafm. Лично мне они нужннее и удобнее ссылок символических. Но вот незадача - жесткие ссылки не делаются на директории. Вторая незадача - в скриптах я ламер, и не только в них. Есть, конечно, отрасли, где я мог бы многих многому научить, но не в скриптовании.
Отсюда вопрос, скорее просьба к умельцам - ищется скрипт, который можно повесить на ПКМ, и который будет делать следующее -
1. выделенный директорий в каком-то месте = создает новый директорий и в этот новый директорий кладет жесткие ссылки на все, что внутри выделенного дир.
2. Сценарий для вложенности - видимо такой же
3. если выделена группа файлов без директориев - просто хардлинки

Если есть готовые решения, которые я не нашел, пожалуйста ткните носом.
ALiEN
Аватара пользователя
Сообщения: 224
Зарегистрирован: 23.08.2022

#

И зачем это надо?

Ну, тем не менее примерно так:
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

indeviral
Аватара пользователя
Сообщения: 264
Зарегистрирован: 15.08.2022

#

Это нужно для того чтобы линки были не отличимы от файлов.
Но по моему это рудимент со времён когда софт нормально симлинки не обрабатывал. Сейчас даже не знаю где можно применить.

Ошибки в тексте-неповторимый стиль автора©

lnx
Сообщения: 224
Зарегистрирован: 24.08.2022

#

indeviral:Сейчас даже не знаю где можно применить.
Организация хранения файлов проектов. По годам, по темам, и т.д.
lnx
Сообщения: 224
Зарегистрирован: 24.08.2022

#

ALiEN:find . -type d -exec mkdir /path/{} \;
Спасибо, но не совсем то, тот же thunar оперирует и передает скрипта всевозможные %n и т.д. Т.е. нет места find,
Вложения
screen_20250802-215007.jpg
ALiEN
Аватара пользователя
Сообщения: 224
Зарегистрирован: 23.08.2022

#

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

lnx
Сообщения: 224
Зарегистрирован: 24.08.2022

#

ALiEN: Хм, если файлу хардлинк создать - он куда-то "самоорганизуется"?
Также, как и симлинк - нет, не организзуется. Дальше переношу в другое место.
На примере - вот в 2025 делаю .... шкаф, у него директорий с фотографиями и чертежами. Он должен отображаться в Пректы-2025-Шкаф такой-то. Также в Проекты-Мебель-Шкафы_и_пр_крупное-.
Аналогично с материалами Библиотеки - там масса ветвлений по направлениям, видам и есть пересечения.
Симлинк при перемещении первичного объекта ломается, а за десятилетия перемещений хватало, менялась структура и пр. И наверняка изменения не последние.
ALiEN
Аватара пользователя
Сообщения: 224
Зарегистрирован: 23.08.2022

#

какие-то сложные манипуляции. Как по мне - проще забекапить сурс, и потом раскидать оригиналы по папкам. Cамое простое решение - самое верное. "Бритва Оккама "

🖥 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
Аватара пользователя
Сообщения: 224
Зарегистрирован: 23.08.2022

#

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

lnx
Сообщения: 224
Зарегистрирован: 24.08.2022

#

Попытался поэкспериментировать со скриптом, ближе всего к успеху такая его интерпретация -
mkdir $1_
find $1 -type d -exec mkdir $1_{} \;
find $1 -type f -exec ln {} $1_{} \;

Но нет успеха, передавемый во второй раз {} полный путь к найденному приводит к аборту. В $1 от thunar и иже с ним в %d or %D передается параметр "полный путь к директорию" или только его имя. А во втором случае из {} нам надо оставить только часть после переданного в $1 пути. Как?
Arhei
Сообщения: 19
Зарегистрирован: 04.07.2025

#

lnx: Если есть готовые решения, которые я не нашел, пожалуйста ткните носом.
cp -lr dir1 dir2
vasek
Сообщения: 535
Зарегистрирован: 31.08.2022

#

lnx:Организация хранения файлов проектов. По годам, по темам, и т.д.
полностью согласен с ...
ALiEN:Как по мне - проще забекапить сурс, и потом раскидать оригиналы по папкам. Cамое простое решение
Но если нужно просто скопировать только уже имеющиеся hardlink новую директорию, то сначала нужно найти эти hardlink
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, существующий в файловой системе. Полное удаление файла произойдёт только после того, как будут удалены все его жёсткие ссылки.

Ошибки не исчезают с опытом - они просто умнеют

lnx
Сообщения: 224
Зарегистрирован: 24.08.2022

#

vasek: Но если нужно просто скопировать только уже имеющиеся hardlink новую директорию, то сначала нужно найти эти hardlink

PS - Особенности: если удалить файл, на который создана жёсткая ссылка, она продолжит работать, так как ссылается на inode, существующий в файловой системе. Полное удаление файла произойдёт только после того, как будут удалены все его жёсткие ссылки.
Сперва надо хардлинки создать, и необходимые для них директории тоже.

Именно из-за этого лично для меня они и ценны. Для примера - симлинки в разных файловых манагерах от оригиналов могу отличаться не броско и я как-то по ошибке удалил ценную картинку прототипа, которую, несмотря на татаническую работу по повторному поиску, так и не смог больше найти. Я не Чингачкук, но на грабли стараюсь наступать единожды.
lnx
Сообщения: 224
Зарегистрирован: 24.08.2022

#

Arhei:cp -lr dir1 dir2
ну это просто скопирует рекурсивно директорий с линками как файлами. Не то. Нам не нужно дублирование одних и тех же файлов. Нам нужен Фигаро.
RusWolf
Аватара пользователя
Сообщения: 259
Зарегистрирован: 16.08.2022

#

lnx: и я как-то по ошибке удалил ценную картинку прототипа, которую, несмотря на татаническую работу по повторному поиску, так и не смог больше найти. Я не Чингачкук, но на грабли стараюсь наступать единожды.
В снапшоте btrfs лежал бы нужный файл, при вовремя сделанном снапшоте.
В btrfs, файл физически не удаляется, пока он есть хоть водном снапшоте.

Arch Linux x86-64 на BTRFS
https://t.me/arch_linuxru

vasek
Сообщения: 535
Зарегистрирован: 31.08.2022

#

так не понял - для чего нужны эти hardlink ??? ... чем не устраивает backup ???

Ошибки не исчезают с опытом - они просто умнеют

Arhei
Сообщения: 19
Зарегистрирован: 04.07.2025

#

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
Сообщения: 224
Зарегистрирован: 24.08.2022

#

Arhei: $ cp --help | grep -e '--link' -l, --link создавать жёсткие ссылки вместо копирования
Блестяще, большое спасибо за тык носом (в мой профналет) и помощь! -
#!/usr/bin/env bash
cp -lr $1 $1_
Arhei
Сообщения: 19
Зарегистрирован: 04.07.2025

#

lnx:
Arhei: $ cp --help | grep -e '--link' -l, --link создавать жёсткие ссылки вместо копирования
Блестяще, большое спасибо за тык носом (в мой профналет) и помощь! -
#!/usr/bin/env bash
cp -lr $1 $1_
тока в кавычки возьмите, а то если вдруг пробел в названии будет нехорошо
Ответить