Поиск по сайту:

Как удалить большую директорию с файлами в 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.

Статьи по данной тематике: