Удалить один тип файла из определенного каталога, но не из подкаталога.

Доступ к файлам подкачки не проходит через файловую систему... ядро ​​​​знает, какие блоки диска являются подкачками, и обращается к ним напрямую 1 . Но несмежный -файл может иметь фрагменты в разных областях диска, и в зависимости от конкретного использования,дополнительный поиск может сделать его медленнее, чем выделенный раздел.

OTOH, если вы имеете дело с облачным сервером, на котором нет раздела подкачки и нет возможности его создать, файл подкачки может спасти ваше приложение.


[1] « Ядро генерирует карту смещения подкачки -> дисковых блоков во время подкачки и с этого момента использует эту карту для выполнения операций ввода-вывода подкачки непосредственно против базовой дисковой очереди, минуя все кэширование, метаданные и код файловой системы. ” – Linux -Архив ядра :Re :Раздел подкачки и файл подкачки

0
24.10.2019, 10:29
2 ответа

В вашей командной строке команда 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()новых процессах.

1
28.01.2020, 02:29

Ваша проблема не с 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

1
28.01.2020, 02:29

Теги

Похожие вопросы