Что внутри mdadm.conf
, используемого в Debian и Gentoo?
В частности, что используется для строки DEVICE
. Если она указывает на какое-то медленное устройство или опущена, то mdadm будет очень долго выполнять зондирование.
Например, в моей системе есть пара устройств /dev/sdX
, которые соответствуют устройствам чтения SD-карт, встроенным в мои мониторы. Они присутствуют независимо от наличия вставленных SD-карт, и их поиск занимает ненулевое количество времени.
Вам следует сузить круг поиска, если это возможно.
Также стоит проверить версию mdadm.
С ksh93
(в OS / X доступен как ksh
):
rmdir {4}(\d)_\1
(будьте осторожны, он может удалить каталог с именем {4} (\ d) _ \ 1
, если нет файла, соответствующего этому шаблону).
С zsh
(в OS / X доступен как zsh
):
setopt extendedglob
rmdir [0-9](#c4)_[0-9]##(/e:'[[ ${REPLY%_*} = ${REPLY#*_} ]]':)
(этот вариант также имеет то преимущество, что учитываются только файлы типа , каталог с использованием квалификатора glob /
выше).
С bash
или другой оболочкой POSIX (например, sh
большинства систем, включая OS / X
):
set -- [0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]
for f do
[ "${f#*_}" = "${f%_*}" ] && set -- "$@" "$f"
shift
done
rmdir "$@"
(будьте осторожны, это может удалить каталог вызывается [0-9] [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]
, если есть в текущем каталоге нет файлов XXXX_XXXX
).
Используя find
и grep
:
find . ! -name . -prune -type d -name '[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]' |
grep -x '\./\(.*\)_\1' |
xargs rmdir
С BSD найдите
(как найдено в OS / X):
find . -maxdepth 1 -regex './\([0-9]\{4\}\)_\1' -type d -delete
С GNU найдите
(обычно не встречается в OS / X, если не установлен через macports / homebrew / fink ...):
find . -maxdepth 1 -regextype grep -regex './\([0-9]\{4\}\)_\1' -type d -delete
ksh93
:
set -o globstar
rmdir - ** / {4} (\ d) \ 1
(имейте в виду, что он не удалит 1111_1111
, если есть 1111_1111 / 2222_2222
, так как он попытается сначала удалить 1111_1111
, что не может в нем есть каталог 2222_2222
, ksh93
не имеет квалификатора od
glob (для порядка глубины) zsh
)
zsh
:
setopt extendedglob
rmdir - ** / [0-9] (# c4) _ [0-9] ## (Dod / e @ '[[$ {$ {REPLY: t}% _ *} = $ {REPLY ## * _}]] '@)
BSD find
:
LC_ALL = C find. -regex '. * / \ ([0-9] \ {4 \} \) _ \ 1' -тип d -delete
GNU найти
:
LC_ALL = C найти. -regextype grep -regex '. * / \ ([0-9] \ {4 \} \) _ \ 1' -type d -delete
Попробуйте следующее: настройка типа регулярного выражения
find -type d -regextype posix-extended -regex '\./([0-9]{4})_\1' -delete
необходима для {4}
.
POSIX (удалите echo
из echo rmdir
, чтобы фактически стереть файлы):
for dir in [0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]/; do
a="$(expr "$dir" : '\(.*\)_\1/')"
${a:+false} || echo rmdir "$dir"
done
Или:
for d in [0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]/; do
expr "$d" : '\(\(.*\)_\2\)/' >/dev/null && echo rmdir "$d"
done
Или:
set -- [0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]/
for d
do expr "$d" : '\(\(.*\)_\2\)/' >/dev/null && echo rmdir "$d"
done
Пара простых, совместимых с POSIX альтернатив:
Нерекурсивный (новые строки в базовом имени запрещены):
ls -F | grep '^\([0-9]\{4\}\)_\1/$' | xargs rm -fr
Рекурсивный:
find . -type d -exec expr {} : '.*/\([0-9]\{4\}\)_\1$' \; -prune \
-exec rm -fr {} + >/dev/null