Это можно сделать в виде одной строки следующим образом:
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 Во-первых, правильно, так как невозможность сделать это может стереть большую часть вашей системы!