Как автоматически генерировать символические ссылки?

351
CelluloidRacer2

Не уверен, что это правильное место для публикации (если нет, извините)

Из-за некоторых ограничений (и предпочтений) я нахожусь в тупике. На машине установлен ProxmoxVE (гипервизор на основе Debian / QEMU).

Проблема в том, что Proxmox не проверяет внутри подкаталогов файлы .iso (необходимые для развертывания виртуальных машин), и я не могу изменить структуру хранилища файлов.

Я пытаюсь выяснить, как автоматически генерировать символические ссылки на основе расширения файла. Моя идея состоит в том, чтобы иметь один каталог с динамическими сопоставлениями для каждого файла .iso, чтобы я мог легко добавлять / удалять их.

Пример структуры файла:

Folder A -Folder B -ISO A -Folder C -ISO B -ISO C -ISO D 

Требуемая файловая структура:

Folder A -ISO A -ISO B -ISO C -ISO D 

Я могу запускать сценарии по мере необходимости, но не обладаю знаниями для написания указанного сценария.

Любая помощь будет принята с благодарностью!

Изменить 1: у меня есть другая папка, я планирую хранить все символические ссылки в

0
Вы не можете сделать точно так, как вы просили, вы можете либо создать новую папку со сплющенной структурой, либо (если позволяет файловая система) вы можете иметь символическую ссылку в папке A и сохранить для нее существующую сплюснутую структуру. Можете ли вы изменить папку A во втором фрагменте кода «Папка A» на «NewFolderA»? davidgo 6 лет назад 0
Я забыл добавить, что у меня есть другой каталог, в который я хотел бы добавить все символические ссылки. Я протестировал его с одним, но хочу, чтобы он динамически обновлялся. CelluloidRacer2 6 лет назад 0

1 ответ на вопрос

0
davidgo

Это можно сделать в виде одной строки следующим образом:

find "/path/to/FolderA" -type f -name "*iso" -exec ln -s {} /path/to/symlinkfiles \; 

Чтобы превратить это в сценарий

#!/bin/bash SOURCEFILES="/path/to/folderA" FLATTENEDFILEDIR="/path/to/folderB"  find "$SOURCEFILES" -type f -name "*.iso -exec ln -s {} $FLATTENEDFILEDIR \; 

Они работают следующим образом: команда find ищет файлы в заданном месте, «тип f» означает, что она ищет только файлы, поэтому символические ссылки и подкаталоги не выполняются (но каталоги ищутся для файлов), * .iso ожидает, что это расширение файла.

Вторая часть (после -exec) выполняется для каждого файла и создает символическую ссылку.

Возможно, вы захотите добавить что-то вроде «rm -r $ FLATTENEDFILESDIR / *» вверху этого скрипта, если допустимо удалить существующие символические ссылки, поэтому вы не попадете на мертвые - НО ЭТО ВАЖНО, ВЫ УСТАНОВИЛИ FLATTENEDFILESDIR Во-первых, правильно, так как невозможность сделать это может стереть большую часть вашей системы!

Вы можете запускать эту команду или скрипт для периодического запуска из cron для автоматизации обновлений. davidgo 6 лет назад 0
Большое спасибо! Просто чтобы подтвердить, запуск rm -r удаляет символическую ссылку, но не фактический файл, верно? CelluloidRacer2 6 лет назад 0
rm -r * рекурсивно * удаляет все, что соответствует указанному параметру, включая символические ссылки и обычные файлы - таким образом, он удаляет все в FLATTENEDFILESDIR. Для ясности он удалит символические ссылки в этом каталоге, но не удалит файлы, на которые указывают символические ссылки, при условии, что они находятся в другом каталоге. davidgo 6 лет назад 0

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