Жесткая связь двух наборов файлов с жесткой связью

Вы можете использовать Vim в режиме Ex:

ex -sc '%!iconv -f cp1251 -t utf8' -cx "$file"
  1. % выберите все строки

  2. ! запустить команду

  3. x сохранить и закрыть

0
19.02.2019, 07:51
2 ответа

Имена файлов являются односторонними -указателями на индексные дескрипторы. В обычной структуре файловой системы Unix нет прямого способа вернуть указатель.

Это означает, что единственный способ сделать то, что вы хотите, — это найти файлы b , разъединить их и создать на их месте новые ссылки на a . Вы не можете сделать это за один раз.

Кроме того, вы не можете напрямую найти жесткие ссылки на файл, вам нужно сканировать всю файловую систему. Версии GNU и FreeBSD (по крайней мере )из findимеют тесты -inumи -samefile, которые можно использовать для поиска файлов (имен )на основе индексного дескриптора.

С помощью GNU find вы сможете сделать что-то подобное, чтобы найти файлы, которые являются жесткими ссылками на b(, включая сам b), и заменить их ссылками наa:

find -samefile b -exec sh -c 'ln -f a "$1"' sh {} \;
0
28.01.2020, 03:59

Нет, их нельзя изменить одновременно. Причина в задействованных конструкциях. Для этого обсуждения файлы разделены на три части:

  • Имя файла (с)
  • Инод
  • Данные файла

Где работают указатели file names --> inode --> file data. Нет обратного указателя для перехода от inode к имени файла.

Единственный способ найти имена файлов, указывающие на индексный дескриптор, — это выполнить поиск по всей файловой системе и проверить каждое имя файла (не рекомендуется ).

Итак, да, вам нужно будет изменить каждую жесткую ссылку одну за другой.


Одно важное замечание. Хотя вы не можете найти жесткие ссылки, вы можете узнать, сколько их. Возможно, стоит проверить, имеет ли больше жестких ссылок a _*или b _*. Таким образом, вы можете выбрать менее связанный файл для уничтожения и добавить больше жестких ссылок к тому, который уже имеет больше всего.

Помните, что в ext3 существует максимум 65 000 жестких ссылок на файл. Я упоминаю об этом только потому, что вчера столкнулся с этой проблемой.

0
28.01.2020, 03:59

Теги

Похожие вопросы