Как я могу эффективно ретаргетировать несколько сим-ссылок?

У меня есть довольно большое количество симлинков (более сотни в одной папке, и где угодно до пары дюжин в каждой из пары дюжин других папок), которые не работают после перемещения с Mate 16.04 на Kubuntu 20. 04 (и, по-видимому, не учёт блюдцевого диска, который в настоящее время не подключён, когда я воссоздал /etc/fstab) -- то, что раньше было /медиа/пользователь/sdc9 теперь просто /sdb9. Это файлы, которые я связал, основываясь на принятом ответе на этот вопрос.

Я проверил, что внесение этого точного изменения в эти сим-ссылки исправит их и они откроют папку, на которую были сделаны ссылки. В отличие от того, чтобы либо воссоздавать их, либо вручную редактировать свойства всех из них (что я сделал за четыре, достаточно, чтобы подтвердить, что это исправляет проблему) (упоминал ли я, что есть по крайней мере пара сотен таких, один набор рассредоточен по паре дюжин папок? ), есть ли эффективный способ, в идеале с помощью одной команды для каждой папки, изменить цель каждой сим-ссылки и заменить /media/user/sdc9 на /sdb9 -- и никаких других изменений?

Я знаю, что есть способы переименовать файлы с помощью подстановочных символов, или подставить вывод ls в awk или другие пути, похожие на арканы. Я предполагаю, что что-то подобное можно сделать с содержимым этих файлов, которые ведут себя как указатели на другие файлы или папки. Однако, несмотря на то, что я использую Linux на базе Debian в качестве ежедневного драйвера в течение почти десяти лет, я недостаточно знаком с командами Linux, чтобы иметь представление о том, что будет делать здесь то, что мне нужно. Такие вещи просто не часто появляются достаточно часто для того, кто просто хочет сделать свои вещи, чтобы потратить сотни часов на их изучение.

0
задан 5 February 2021 в 15:01

2 ответа

Меня также много интересовал этот вопрос о том, что показывает gnome-system-monitor в качестве памяти, несмотря на наличие столбца rss. Я не нашел никакой официальной документации, но обнаружил, как вычисляется память.

В основном резидентная память - это фактическая физическая память, которую она использует. Теперь rss также может включать в себя часть общей памяти процесса. Таким образом, если вы вычитаете общую память из резидентной памяти, вы получаете часть памяти, которая принадлежит только указанному процессу.

Надеюсь, это помогло бы:)

-121--912035-

Причиной стал установленный вручную шрифт, его удаление решило проблему. Для этого я просто удалил файлы шрифтов .ttf из путей \usr\share\fonts\truetype и \usr\local\share\fonts .

-121--910763-

Самый простой способ восстановить нарушенные symlinks - смонтировать соответствующий раздел по адресу /media/user/sdc9 .

Создайте соответствующую fstab-запись для этого раздела. Не используйте имя устройства, например /dev/sdc9 или /dev/sdb9 , используйте UUID или LABEL для идентификации раздела. Я предпочитаю LABEL, а не UUID, так как он лучше читается, и мне не нужно искать UUID разделов. Просто убедитесь, что МЕТКА уникальна в вашей системе.

Можно установить метку для разделов ext2, ext3 или ext4 с tune2fs :

sudo tune2fs -L /dev/sdxy

, где xy необходимо заменить правильной буквой и номером.

Из man tune2fs :

-L volume-label
          Set the volume label of the filesystem. Ext2 filesystem labels can be at 
          most 16 characters long; if volume-label is longer than 16 characters,
          tune2fs will truncate it and print a warning. The volume label can be
          used by mount(8), fsck(8), and /etc/fstab(5) (and possibly others) by
          specifying LABEL=volume-label instead of a block special device name 
          like /dev/hda5.

Команда lsblk -f отображает достаточную информацию о разделах, включая LABEL, UUID и имя устройства.

1
ответ дан 18 March 2021 в 23:37
121 --- 910716-121 --- 910716

Найти все файлы в текущем каталоге, которые являются SymLink to / Media / user / sdc9 :

$ find . -ilname '/media/user/sdc9'

Найдите все файлы в текущем каталоге, который является SymLink на / Media / user / SDC9 , и замените их симчидкой на / SDC9 :

$ find . -ilname '/media/user/sdc9' -exec ln -vfs /sdc9 {} \;

{} заменяется именем файла и \; сигнализирует конец команды для выполнения. Это будет работать на каждом отдельном файле, который найден, в свою очередь.

Если у вашего пользователя нет разрешения на запись, вам нужно будет делать это как root.

Будьте осторожны, если вы собираетесь сделать это в каком-то файловом дереве, которые могут быть установлены другие файловые системы; Если вы сделали это из корневого каталога, то он будет воспрещаться в / ProC / и / SYS / и, вероятно, найден в бесконечной петле. Вы можете использовать опцию -xdev -xdev для предотвращения . Найти , с пересечения точки монтирования.

Если вы абсолютно хочете ли вы только для того, чтобы он действовал в списке каталогов, и не повторяющуюся вниз, используйте опцию -MaxDepth 1 .

Не пытайтесь сделать это со разбором LS ; Это может работать большую часть времени, но в конечном итоге вы приедете откровку.

0
ответ дан 18 March 2021 в 23:37

Другие вопросы по тегам:

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