Для одного из массивов:
for num in "${pri[@]}"; do
name="proc_${num}_test.data"
if [ ! -f "$primary/$name" ]; then
printf '"%s" not found in "%s"\n' "$name" "$primary" >&2
fi
done
То есть переберите числа в массиве, создайте ожидаемое имя файла и проверьте, существует ли ожидаемое имя файла¹ в каталоге. Если это не так, запишите диагностическое сообщение в стандартный поток ошибок.
Создание обоих наборов файлов за один раз:
set -- "$primary" "$secondary"
typeset -n array
for array in pri snd; do
for num in "${array[@]}"; do
name="proc_${num}_test.data"
if [ ! -f "$1/$name" ]; then
printf '"%s" not found in "%s"\n' "$name" "$1" >&2
fi
done
shift
done
Это вводит ссылочную переменную имени array
. При доступе к ${array[@]}
переменная, чье имя было присвоеноarray
(в цикле, сначала будет pri
, затем snd
).
Имена каталогов $primary
и $secondary
назначаются позиционным параметрам $1
и $2
перед циклом с использованием set
, а внутри цикла мыshift
$2
в $1
, когда мы закончим с оригиналом $1
.
¹ и является обычным файлом (или символической ссылкой на доступный обычный файл ), измените на [ ! -e "$primary/$name" ] && [ ! -L "$primary/$name" ]
, чтобы убедиться, что файл существует независимо от его типа.
Вот решение, которое я нашел в конце.
Для updatedb я перебираю отдельные смонтированные каталоги и создаю специальный файл db:
alias updatedb_lanserver='cd /mnt/myCustomDirectory; for folder in *; do updatedb -l 0 -o ~/.lan_server_$folder.db -U $folder; done'
Для одновременного поиска по всем этим файлам БД я создал функцию bash:
locate_lanserver() { for dbfile in ~/.lan_server*.db; do locate -d $dbfile -i $1; done }
теперь я могу просто использовать эту функцию для поиска чего-либо:
locate_lanserver text_to_be_searched