Это:
$ rm +([0-9]).[0-9][0-9]
Удаляет все файлы с одной (или несколькими) цифрами перед точкой и ровно двумя десятичными знаками.
Это должно выполняться в bash, поскольку extglog установлен по умолчанию для интерактивных оболочек, но если вам нужно использовать его в сценарии, используйте это:
shopt -s extglog
rm +([0-9]).[0-9][0-9]
Для ясности я добавляю более или менее скриптовый тест того, о чем мы говорили в комментариях. Это ядро 4.7.2 , где проблема тоже не возникает:
$ cd /dev/shm
$ free
total used free shared buff/cache available
Mem: 1794788 673948 873668 19300 247172 963316
Swap: 2097148 0 2097148
$ for i in `seq 100000`; do touch node$i; done
$ ls -1|wc -l # oops, there are extra three pulseaudio files here
100003
$ free
total used free shared buff/cache available
Mem: 1794788 738240 811944 19300 244604 890184
Swap: 2097148 0 2097148
Хорошо, мы получили объем памяти. Но rm
очищает его
$ rm node*
$ free
total used free shared buff/cache available
Mem: 1794788 671484 896524 19300 226780 965884
Swap: 2097148 0 2097148
Совпадение не идеальное, потому что я тем временем очистил некоторые кеши. Но количество свободной памяти и памяти в кеше одинаково в начале и в конце этого небольшого эксперимента.
Поэтому да, проблема возникает только в старой версии ядра. Это будет означать, что была ошибка, но она уже исправлена.
Похоже, это просто ошибка в старом ядре, которое работает на этой конкретной машине. Я не могу воспроизвести его на новой машине RHEL 6 с самыми последними исправлениями ядра.