Как удалить большую директорию с файлами в Linux
Управление файлами — одна из распространенных задач, которую пользователь выполняет в системе Linux, которая включает в себя создание, копирование, перемещение, изменение и удаление файлов и каталогов.
В этой статье содержится несколько советов по удалению большого каталога, содержащего тысячи файлов в системе Linux.
Удаление файлов в Linux
Наиболее распространенным способом удаления файлов в системе Linux является использование команды rm, которая принимает следующий синтаксический формат:
$ rm [ options ] sample_file.txt
Например, чтобы удалить текстовый файл с именем file1.txt, выполните команду:
$ rm file1.txt
Чтобы принудительно удалить файл без запроса разрешения, передайте флаг -f
следующим образом.
$ rm -f file1.txt
Удалить каталог в Linux
Чтобы удалить каталог с именем sample_directory, выполните следующую команду:
$ rm -rf sample_directory
Опция -r
рекурсивно удаляет каталог вместе со всеми подкаталогами и файлами, содержащимися в нем.
Чтобы удалить или удалить пустой каталог, используйте команду rmdir, которая пригодится, когда вы хотите удалить пустой каталог с именем test_directory, как показано на рисунке:
$ rmdir test_directory
Удаление большого каталога с тоннами файлов
При выполнении команды rm файловая система удаляет только ссылку на файл, что делает файл недоступным для пользователя, но в реальном смысле данные самого файла остаются нетронутыми на диске.
Поэтому при выполнении команды rm удаляется только ссылка на файлы, что освобождает блоки хранения в файловой системе.
Таким образом, существует несколько способов удаления файлов в Linux.
Удаление файлов с номером inode в Linux
Например, вы можете удалить файл, используя его номер inode. Вы можете узнать номер inode файла с помощью команды stat, как показано на рисунке.
$ stat file1.txt
File: file.txt
Size: 4076 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1573697 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ tecmint) Gid: ( 1000/ tecmint)
Access: 2023-05-08 12:10:55.656070248 +0530
Modify: 2023-05-08 12:10:55.656070248 +0530
Change: 2023-05-08 12:10:55.656070248 +0530
Кроме того, вы можете передать флаг -i
в команде ls при перечислении файлов внутри каталога.
$ ls -li
1573697 .rw-rw-r-- tecmint tecmint 4.0 KB Mon May 8 12:10:55 2023 file1.txt
Чтобы удалить файл с использованием его inode, используйте команду find, как показано в синтаксисе ниже.
$ find /path/to/file -inum INODE_NUM -exec rm -i {} +
В нашем примере для удаления файловых file1.txt, которые находятся в текущем каталоге, команда будет следующей:
$ find /path/to/file -inum 1573697 -exec rm -i {} +
Нажмите «y»,
чтобы подтвердить удаление, и нажмите ENTER.
Давайте теперь рассмотрим, как удалить большие директории с тысячами файлов.
Создание каталога с тысячами файлов
Старая добрая команда rm — это самый быстрый способ удаления большого каталога с тысячами файлов. Чтобы продемонстрировать это, мы сначала создадим образец каталога и перейдем в него.
$ mkdir test_dir
cd test_dir
Далее мы создадим безумно огромное количество файлов, в данном случае 500 000 текстовых файлов, используя следующий цикл bash.
$ time for item in {1..500000}; do touch file_name$item.txt; done
ПРИМЕЧАНИЕ: Вышеуказанная команда является ресурсоемкой и, следовательно, потребляет значительное количество процессора и оперативной памяти. Это также занимает довольно много времени в зависимости от технических характеристик вашей системы. В моем случае я использую виртуальную машину с 4 ГБ ОЗУ и 3 процессорами.
Самый быстрый способ удалить каталог в Linux
Самый быстрый способ удалить большой каталог — использовать старый добрый каталог rm, как показано ниже. Здесь параметр time отображает время, затраченное на успешное выполнение команды.
$ time rm -rf /test_dir
Из вывода видно, что на удаление всего каталога ушло примерно 6 секунд.
Удаление большого каталога с помощью команды Find
Еще одним способом удаления больших каталогов является использование команды find, как показано в следующем синтаксисе.
$ time find /path/to/directory -delete
Хотя и не так быстро, как команда rm, она все равно выполняет свою работу.
$ time find test_dir -delete
Удаление большого каталога с помощью команды Perl
Другой подход заключается в использовании скриптового языка Perl внутри каталога для удаления множества файлов.
$ cd test_dir
time perl -e 'for(<*>){((stat)[9]<(unlink))}'
Из вывода можно сделать вывод, что удаление всех файлов в каталоге заняло гораздо больше времени, чем предыдущие команды, которые мы рассматривали ранее.
Заключение
Вот и все. В этом руководстве мы рассмотрели, как можно удалить большие каталоги, содержащие тысячи файлов в системе Linux.