LINUX.ORG.RU
ФорумAdmin

удаление большой папки


0

0

Здравствуйте, товарищи. Есть следующая проблема пока не знаю как решать :( - папка с несколькими миллионами файлов. (почта на postmaster не проверялась несколько лет). как ее удалить? rm -rf - отъедает 1,5 гб памяти безрезультатно, при этом из-за загрузки сервера практически останавливается почтовая служба.

Или другой вопрос. как узнать названия любых 100 файлов в папке. (дальше через xargs в rm передам)


Ответ на: комментарий от php-coder

>Может find . -type f | head ?

вобщето это какбы найдет все файлы но покажет только первые... вот если както брякать поиск через скажем 10 сек, найденное удалять, потом опять запускать поиск...

anonymous
()
Ответ на: комментарий от php-coder

Спасибо. Через find пробовал была версия 4.1.20-r2 она строила список всех файлов перед выводом. Работала неприемлемо долго.

Почитал форум, обновился до 4.3.13 не помогло. Вообщем йод, зеленка, стрептоцид, ножка больше не болит. Т.е, perl рулит. Проблема решена. Спасибо товарищи

#-----------------------------------

#!/usr/bin/perl -w

$dirname = "./new";

opendir ( DIR, $dirname ) || die "Error in opening dir $dirname\n"; while( ($filename = readdir(DIR))){ # print("./new/$filename\n"); unlink("./new/$filename"); } closedir(DIR);

#------------------------

KsI__
() автор топика
Ответ на: комментарий от anonymous

Нет конечно. На них unlink ошибку выдает. Use of uninitialized value in concatenation (.) or string

KsI__
() автор топика
Ответ на: комментарий от anonymous

>А чем
>rm -vfr .new/
>не подошёл-то?
>anonymous (*) (05.08.2008 18:00:50)

ты читать умеешь? вторая строчка первого поста, там написано.

anonymous
()
Ответ на: комментарий от KsI__

>А "./new/." и "./new/.." тоже были удалены?

>>Нет конечно. На них unlink ошибку выдает. 
>>Use of uninitialized value in concatenation (.) or string
>>вообщем не стреляйте в пианиста, он играет как умеет.
>>А ваши варианты, как красивее сделать?


http://www.linux.org.ru/jump-message.jsp?msgid=2991794&cid=2993382

Я же не зря там сделал два readdir перед циклом.

perl -e 'opendir(D1, "/tmp/test/aaa") || die "Error: $!";
         readdir(D1);  # .
         readdir(D1);  # .. 
         while ($a=readdir(D1)) {
            unlink("$a");
         }
        '

sdio ★★★★★
()
Ответ на: комментарий от sdio

Про

> perl -e 'opendir(D1, "/tmp/test/aaa") || die "Error: $!";
>                 readdir(D1);  # .
>                 readdir(D1);  # ..

А в каком стандарте написано, что первый readdir возвращает  '.', а 
второй -- '..'? 

Dselect ★★★
()
Ответ на: Про от Dselect

Ну добавь проверку.
Если встретишь вариант когда первые два значения не . и/или ..
скажи мне

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.