Я не понимаю то, что Ваша функция, как предполагается, делает. Как это лучше, чем простое выполнение
for host in host1 host2 host3; do ping -c 1 host >/dev/null && do_stuff; done
Если все, что Вы хотите знать, - то, если хост произошел или не и выполняет команду, если это, вышеупомянутое должно быть достаточным.
]Попробуйте:[
] [find . -type f -exec gunzip {} +
]
[]Это предполагает, что текущий каталог содержит только файлы, которые вы хотите распаковать.[
].] Предел находится в ядре и равен суммарному размеру аргументов и окружения, переданных системному вызову []execve()[
], используемому для выполнения команды. Можно разделить ее на несколько вызовов.[
]To []gunzip[
] all the []. gz[
] файлов в текущем каталоге:[
]с []zsh[
]:[
autoload zargs # best in ~/.zshrc
zargs ./*.gz -- gunzip
]
[]С помощью []ksh93[
]:[
command -x gunzip ./*.gz
]
[]GNUly:[
] [printf '%s\0' *.gz | xargs -r0 gunzip
]
[]POSIXly (и с помощью []gunzip[
]):[
find . ! -name . -prune -name '*.gz' -exec gunzip {} +
]
[](остерегайтесь, что вы также распакуете спрятанное []. gz[
] файлы)[
]Или вы можете увеличить этот лимит на некоторых системах. На последних версиях Linux:[
] [ulimit -s unlimited
gunzip ./*.gz
] ]Немного эффективным решением было бы,[
] [][]найти $PWD -тип f -имя "*.gz" -print0 | xargs -0 gunzip[
][
]Но если в вашей находке нет опции -print0 и в именовании файлов/директории нет места, то можно пропустить аргументы -print0 и -0.[
].]Менее эффективный ( но очень гибкий ) процесс - это создание пакетного файла:[
] [ls | grep .gz | sed -e 's/^/gunzip /' | less
]
[]показывает, что произойдет, чтобы простая опечатка не уничтожила вашу систему[
] [ls | grep .gz | sed -e 's/^/gunzip /' | bash
]
[]делает это прямо сейчас[
] [ls | grep .gz | sed -e 's/^/gunzip /' > unpack
at 02:00
bash unpack
<ctrl-d>
]
[]делает это за ночь[
] [] (обратите внимание, что в этом примере не учитываются пробелы в именах файлов)[
].Если вы хотите заархивировать файлы в другой каталог, вы можете попробовать:
$ find <path to gzip files> -type f -name "*.gz" -print | \
xargs -I % sh -c 'echo "gunzip -c % > `basename %.gz`"; \
gunzip -c % > `basename %.gz`'
В приведенном выше примере файлы архивируются в каталог, в котором выполняется команда.