Директории с большим количеством файлов

Получилась однажды интересная ситуация, в одной директории оказались миллионы файлов.
Причем часть из них — нужные.

При попытке посмотреть список файлов естественно получится ступор на длительное время.
Как вариант их можно посмотреть через FTP, у которого за частую стандартный лимит на количество отображаемых файлов 10 000, например FTP клиентом FileZilla удобно перемещать файлы по директориям, но этот вариант длительный, из-за того что время еще тратится на FTP запросы, нагрузка на диск при этом низкая.

Если файлы не нужные, их можно удалить командой (с запросом подтверждения на удаление):

rm -r /dir/

Или удалить все без запроса вместе с директорией:

rm -rf /dir/

В моем случае не нужными были мелкие файлы, по этому перейдя в нужную директорию, удалил командой ниже все что меньше указанного размера:

cd /dir/
find -size -2 -type f -print -delete

Перед удалением можно посмотреть количество таких файлов и общее количество, однако это тоже длительные процесс:

find -maxdepth 1 -size -2 -type f -print | wc -l
find -maxdepth 1 -type f -print | wc -l

Если вместо -2 указать 0, то будут удаляться файлы с нулевым размером, то есть пустые.

Если нужно отсортировать файлы по директориям, перейдем в директорию с файлами, создадим нужные директории, например по датам и переместим файлы по шаблону (все у которых название начинается на 2017, -maxdepth 1 указывает что не нужно искать файлы в поддиректориях):

cd /dir/
mkdir 2017
find -maxdepth 1 -type f -name '2017*' -exec mv -vn -t /dir/2017 {} \+

Результат выполнения можно записывать в файл добавив к команде «> файл», например:

find -maxdepth 1 -type f -name '2017*' -exec mv -vn -t /dir/2017 {} \+ > /dir/dir/file.log

Оставьте комментарий

Добавить комментарий

Больше на IT Blog

Оформите подписку, чтобы продолжить чтение и получить доступ к полному архиву.

Continue reading