不确定这是否是发布此文的正确位置(如果不是,抱歉)
由于某些限制(和偏好),我发现自己陷入了困境。机器正在运行 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,因为不这样做可能会擦除您的大部分系统!