Доступ к файлам подкачки не проходит через файловую систему... ядро знает, какие блоки диска являются подкачками, и обращается к ним напрямую 1 . Но несмежный -файл может иметь фрагменты в разных областях диска, и в зависимости от конкретного использования,дополнительный поиск может сделать его медленнее, чем выделенный раздел.
OTOH, если вы имеете дело с облачным сервером, на котором нет раздела подкачки и нет возможности его создать, файл подкачки может спасти ваше приложение.
[1] « Ядро генерирует карту смещения подкачки -> дисковых блоков во время подкачки и с этого момента использует эту карту для выполнения операций ввода-вывода подкачки непосредственно против базовой дисковой очереди, минуя все кэширование, метаданные и код файловой системы. ” – Linux -Архив ядра :Re :Раздел подкачки и файл подкачки
В вашей командной строке команда find
создаст серию отдельных команд rm
и выполнит их. Каждая команда rm
удалит один файл, указанный с полным путем. Таким образом, вам нужно ограничить не rm
, а find
.
Синтаксис для этого может быть немного сложным по историческим причинам. Вы можете сделать это так:
find /directory/backup ! -path /directory/backup -prune -mtime +1 -type f -name "FileName*.EXT" -exec rm {}\+
find $DIR ! -path $DIR -prune <desired_conditions> [desired_action]
— это совместимый с POSIX -способ ограничить find
одним каталогом. Но он по-прежнему будет перечислять имена подкаталогов -этого конкретного каталога, если вы не добавите дополнительные условия.
Использование -type f
ограничит find
попытки генерировать rm
команды для подкаталогов -в каталоге резервного копирования, которые просто создадут бесполезные сообщения об ошибках :для удаления каталога, вам потребуется рекурсивный rm
или rmdir
, и я понял, что в данном случае этого делать не стоит.
Замена точки с запятой в конце спецификации команды для -exec
знаком «плюс» улучшит производительность, если есть много файлов для удаления :вместо того, чтобы генерировать одну команду rm
для каждого файла, она будет генерировать как можно меньше команд, помещая в каждую команду rm
столько аргументов имени пути, сколько позволяет длина командной строки. Это резко снижает потребность в fork()
новых процессах.
Ваша проблема не с rm
, а с find
. Используйте опцию -maxdepth 0
, чтобы ограничить поиск начальным каталогом.
Если -maxdepth
не поддерживается вашей версией find
, вы также можете исключить каталоги с -path
и -prune
:
To ignore a whole directory tree, use -prune rather than checking every file in the tree. For example, to skip the directory `src/emacs' and all files and directories under it, and print the names of the other files found, do something like this:
find. -path./src/emacs -prune -o -print