Updatedb на смонтированных общих ресурсах samba

Для одного из массивов:

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" ], чтобы убедиться, что файл существует независимо от его типа.

0
15.03.2020, 18:12
1 ответ

Вот решение, которое я нашел в конце.

Для 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
0
28.04.2021, 23:20

Теги

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