如何自动生成符号链接?

如何自动生成符号链接?

不确定这是否是发布此文的正确位置(如果不是,抱歉)

由于某些限制(和偏好),我发现自己陷入了困境。机器正在运行 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:我有另一个文件夹,我计划将所有符号链接存储在其中

答案1

可以通过一行代码完成,如下所示:

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,因为不这样做可能会擦除您的大部分系统!

相关内容