Используйте find
для вызова find
!
find. -type d \( -exec sh -c 'cd "$0"; find. \( -name. -o -prune \) -name "*.grid" | grep -q.' {} \; -o -print \)
Это соответствует стандарту POSIX -, благодаря этому ответу:
Кроме того, это будет работать независимо от пробелов, специальных символов или даже новых строк в именах файлов или каталогов.:)
(Н.Б. :Если у вас есть специальные символы или новые строки в именах ваших каталогов, вы должны изменить этот последний -print
первичный на любое действие, которое вы хотите выполнить с каталогами, поскольку вы не сможете безопасно разобрать получившийся напечатанный список, если вы просто используете -print
.)
Вот версия с разрывами строк, добавленными в возможно ошибочной попытке улучшить читабельность:
find. -type d \
\( \
-exec sh -c '
cd "$0";
find. \( -name. -o -prune \) -name "*.grid" |
grep -q.
' {} \; \
-o -print \
\)
Я использую для этого memdisk
из syslinux
. Я не знаю, какой это пакет в Centos, но в Debian он находится в пакете syslinux-common
. Пакет, вероятно, имеет похожее имя на Centos.
Я также использую приведенный ниже сценарий для автоматического создания записей для всех файлов .iso
и .img
, найденных в /boot/memdisk/
, при каждом запуске update-grub
.
В системах, отличных от -Debian, вы должны запустить grub-mkconfig -o /boot/grub/grub.cfg
вместоupdate-grub
-update -grub — это просто простая оболочка вокруг grub -mkconfig.
В своих системах я сохранил следующее как /etc/grub.d/42-memdisk
и сделал его исполняемым с помощью chmod +x
. Число в начале имени файла влияет на порядок его выполнения. grub-mkconfig
запускает сценарии из /etc/grub.d/
в отсортированном порядке. В моей системе это последний выполненный скрипт, поэтому записи memdisk
находятся внизу меню grub.
#!/bin/sh
set -e
IMAGES=/boot/images
. /usr/lib/grub/grub-mkconfig_lib
if test -e /boot/memdisk ; then
echo "Found memdisk: $MEMDISKPATH" >&2
MEMDISKPATH="$( make_system_path_relative_to_its_root "/boot/memdisk" )"
find "$IMAGES" -name '*.img' -o -name '*.iso' | sort |
while read image ; do
IMAGEPATH="$( make_system_path_relative_to_its_root "$image" )"
echo "Found image: $IMAGEPATH" >&2
cat << EOF
menuentry "Bootable image: $(basename $IMAGEPATH | sed -E -e 's/\.(img|iso)$//i')" {
EOF
prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e 's/^/\t/'
cat << EOF
linux16 $MEMDISKPATH bigraw
initrd16 $IMAGEPATH
}
EOF
done
fi