xargs уже не так полезен, как раньше; find был исправлен, так что он больше не нужен. Если вы закончите свою командную строку -exec
символом +
вместо ;
, find вызовет командную строку для пакетов самих результатов. Как указал mosvy, xargs, по общему признанию, работает параллельно с find, но я не нашел, что это очень важно для моей обработки. Однако это, вероятно, для вас, поскольку вы просматриваете сжатые файлы в своем цикле.
find./ -maxdepth 1 -type f -name "*.*ar" ! -name "*.tar" -exec zipgrep -lr "$classpathjarname" {} +
Ваша замена не сработала, потому что вы ее не поняли; то, как работала ваша первая версия, зависело от zipgrep, сообщающего через свой статус выхода, соответствует ли файл или нет. Этот вариант зависит от zipgrep, сообщающего о совпадающих именах файлов, что и делает опция -l.
find./ -maxdepth 1 -type f -name "*.*ar" ! -name "*.tar" -print0 | xargs -0 -P2 zipgrep -lr "$classpathjarname"
- это то, как вы бы сделали это с помощью xargs. Ваши сообщения об ошибках zipgrep связаны с тем, что у вас, по-видимому, есть файл, который либо не является zip-файлом, либо является пустым zip-файлом, который find отправляет в zipgrep.
При всем сказанном это не будет намного быстрее, чем первый способ, потому что подавляющее большинство времени, затрачиваемого первым скриптом, было связано с тем, что вы обращаетесь к содержимому сжатых файлов и что занимает много времени.
Вы можете использовать простую петлю for
как
beg=1
end=5
for i in $(seq $beg $end)
do
QRCode[$i]=$(cat /etc/wireguard/qr/client$i)
done
Это создает массив bash, и вы можете получить доступ к i
-му элементу как $QRCode[$i]
или ко всему массиву с помощью ${QRCode[*]}
. Массивы в bash не обязательно должны начинаться с индекса 0.
Я бы использовал массив вместо одиночных переменных, зная, сколько существует файлов:
declare -a QRCodes
for i in {1..10}; do
QRCodes[$i]="$(cat /etc/wireguard/qr/client$i)"
done
Затем, чтобы получить конкретное значение:
$ echo "${QRCodes[1]}"
<some value from client1 file>
Чтобы получить все значения:
printf "%s\n" "${QRCodes[@]}"