Cmd удалить файлы больше
Удаляет один или несколько файлов. Эта команда выполняет те же действия, что и команда Erase .
команда del также может запускаться из консоли восстановления Windows с использованием различных параметров. дополнительные сведения см. в разделе Windows среды восстановления (WinRE).
Если удалить файл с диска с помощью Del , вы не сможете получить его.
Синтаксис
Параметры
- файлы r только для чтения
- h скрытые файлы
- я не проиндексированные файлы содержимого
- системные файлы
- файлы , готовые к архивации
- l точки повторного анализа
- - Используется в качестве префикса, означающего "not"
Remarks
FileName, Delete (Y/N)?
Чтобы подтвердить удаление, нажмите клавишу Y. Чтобы отменить удаление и отобразить следующее имя файла (если указана группа файлов), нажмите клавишу N. Чтобы закрыть команду Del , нажмите клавиши CTRL + C.
Если вы отключаете расширение команды, параметр /s отображает имена всех файлов, которые не были найдены, а не отображает имена удаляемых файлов.
Если указать определенные папки в <names> параметре, все включаемые файлы также будут удалены. Например, если нужно удалить все файлы в папке \ворк , введите:
Можно использовать подстановочные знаки (* и ?) для удаления нескольких файлов за раз. Однако во избежание непреднамеренного удаления файлов следует использовать подстановочные знаки с осторожностью. Например, если ввести следующую команду:
Are you sure (Y/N)?
Чтобы удалить все файлы в текущем каталоге, нажмите клавишу Y и нажмите клавишу ВВОД. Чтобы отменить удаление, нажмите клавишу N и нажмите клавишу ВВОД.
Прежде чем использовать подстановочные знаки с командой Del , используйте те же подстановочные знаки с командой dir , чтобы получить список всех файлов, которые будут удалены.
Примеры
Чтобы удалить все файлы в папке с именем Test на диске C, введите следующую команду:
Чтобы удалить все файлы с расширением имени файла .bat из текущего каталога, введите:
Командная строка – мощный инструмент для автоматизации и упрощения многих задач, которые возникают при администрировании компьютера с операционной системой Windows. В этой статье мы рассмотрим команды DEL, ERASE, RD и RMDIR. С их помощью вы сможете удалять файлы и папки прямо из командной строки.
Удаление файлов через командную строку
Если вам нужно удалить файл через командную строку, то для этого нужно использовать команду DEL или ERASE . Эти команды являются синонимами и работают одинаково. Вы можете получить подробную информацию об этих командах, если введете их в командную строку с параметром « /? ». Например, вы можете ввести « del /? » и в консоль выведется вся основная информация о команде del .
Команда DEL (или ERASE ) предназначена для удаления одного или нескольких файлов и может принимать следующие параметры:
- /P – удаление с запросом подтверждения для каждого файла;
- /F – удаление файлов с атрибутом «только для чтения»;
- /S – удаление указанного файла из всех вложенных папок;
- /Q – удаление без запроса на подтверждение ;
Обычно, для того чтобы воспользоваться командной DEL нужно сначала перейти в папку, в которой находится файл для удаления, и после этого выполнить команду. Для того чтобы сменить диск нужно просто ввести букву диска и двоеточие. А для перемещения по папкам нужно использовать команду « CD ».
После того как вы попали в нужную папку можно приступать к удалению файлов. Для этого просто введите команду DEL и название файла.
Также, при необходимости вы можете удалять файлы, не перемещаясь по папкам. В этом случае нужно указывать полный путь к документу.
Нужно отметить, что при использовании параметра «/a», отвечающие за атрибуты буквы нужно вводить через двоеточие. Например, для того чтобы удалить все файлы с атрибутом «только для чтения» и с расширением «txt» нужно ввести команду « del /F /A:R *.txt ».
Аналогичным образом к команде DEL можно добавлять и другие параметры. Комбинируя их вы сможете создавать очень мощные команды для удаления файлов через командную строку Windows. Ниже мы приводим еще несколько примеров:
Удаление папок через командную строку
Если вам нужно удалить папку через командную строку Windows, то указанные выше команды вам не помогут. Для удаления папок существует отдельная команда RD или RMDIR (сокращение от английского Remove Directory).
Команды RD и RMDIR являются синонимами и предназначены для удаления папок. Они могу принимать следующие параметры:
Например, для того чтобы удалить папку достаточно ввести команду RD и название папки.
Если папка содержит вложенные папки или файлы, то при ее удалении будет выведена ошибка».
Для решения этой проблемы к команде RD нужно добавить параметр « /s ». В этом случае удаление проходит без проблем, но появляется запрос на подтверждение удаления.
Для того чтобы удаление дерева папок прошло без появления запроса на подтверждение к команде нужно добавить параметр « /q ». В этом случае папка удаляется без лишних вопросов.
Также команда RD может принимать сразу несколько папок, для этого их нужно просто разделить пробелом. Например, если выполнить « rd 111 222 », то за один раз можно удалить папки с названиями « 111 » и « 222 ».
Если же вам нужно удалить через командную строку папку, которая сама содержит пробел, то в этом случае ее название нужно взять в двойные кавычки.
Комбинируя команды DEL и RD , можно создавать мощные скрипты для очистки и удаления папок в операционной системе Windows.
У меня есть каталог, который содержит миллионы подкаталогов и триллионы файлов. И теперь я должен это очистить. Говоря триллион, я говорю не о размере файла, а о количестве файлов.
Я пытался удалить его с del/s помощью и с помощью проводника Windows. Никто не может выполнить задачу. Я попытался удалить некоторые из подкаталогов один за другим, и это заняло у меня несколько дней. Проблема, с которой я столкнулся, заключалась в том, что каждый раз, независимо от того, используете del ли вы проводник или проводник, я вижу в диспетчере задач, что экземпляр проводника потребляет неимоверную память и постепенно приводит к сбою системы.
Осталось удалить несколько сотен миллионов файлов. Есть ли возможность достичь одной (или несколькими) командами / действиями?
Я пытался сделать это с Cygwin rm -fr , и дал тот же результат. Суммируется как:
Независимо от того, используете ли вы проводник Windows, DEL из командной строки или rm команду Cygwin , объем системной памяти постепенно падает до нуля, и в конечном итоге окно падает.
Если в какой-то момент, прежде чем система выйдет из строя, процесс будет закрыт (с помощью сочетания клавиш CTRL + C или чего-либо еще), окно продолжит работать в обычном режиме. Однако вся используемая память НЕ будет освобождена. Скажем, я остановил процесс, пока системная память достигает 91%, диспетчер задач сообщает: 4 ГБ ОЗУ всего, кэш-память 329 МБ и доступно 335 МБ. Тогда использование памяти останется на этом уровне, пока я не перезагружу машину. Если я остановлю экземпляр проводника в диспетчере задач, экран погаснет при включенном индикаторе жесткого диска и больше не вернется. Обычно, когда я останавливаю экземпляр проводника в диспетчере задач, я могу повторно вызвать его, нажав Win + E, или он был перезапущен автоматически.
Ну очень хорошее управление памятью!
[ИЗМЕНИТЬ СНОВА] Кажется, что некоторая часть использованной памяти действительно освободилась через некоторое время, но не все. Некоторая часть кэшированной и доступной памяти вернулась в диспетчере задач. Я больше не ждал, не уверен, что будет потом.
Итак, ваша главная проблема в том, что каталоги и подкаталоги не удаляются? Вы можете написать пакетный скрипт, который рекурсивно удаляет файлы, не начиная с верхнего уровня, а, например, на пятом уровне структуры папок. Это разделило бы работу на множество отдельных и последовательных 'rm's' Я должен знать, как, черт возьми, вы получили триллион файлов, на самом деле . Триллиону файлов нужна таблица файлов размером 1 ПБ. Самые большие жесткие диски в настоящее время - несколько ТБ. Как вы могли получить такой большой раздел?Причина, по которой большинство методов вызывают проблемы, заключается в том, что Windows пытается перечислить файлы и папки. Это не большая проблема с несколькими сотнями или даже тысячами файлов / папок глубиной в несколько уровней, но если у вас есть триллионы файлов в миллионах папок, идущие на десятки уровней глубины, то это определенно приведет к падению системы ,
Предположим, у вас есть «только» 100 000 000 файлов, и Windows использует простую структуру, подобную этой, для хранения каждого файла вместе с его путем (таким образом вы избегаете хранения каждого каталога по отдельности, тем самым сохраняя некоторые издержки):
Причина, по которой Windows пытается перечислить файлы и папки перед их удалением, варьируется в зависимости от метода, который вы используете для их удаления, но это делают как Проводник, так и интерпретатор команд (вы можете увидеть задержку при запуске команды). Вы также можете увидеть, как мигает индикатор активности диска (HDD), когда он читает дерево каталогов с диска.
Лучше всего справляться с подобной ситуацией, используя инструмент удаления, который удаляет файлы и папки по отдельности, по одному за раз. Я не знаю, есть ли какие-либо готовые инструменты для этого, но это должно быть возможно сделать с помощью простого пакетного файла.
Для этого нужно проверить, был ли передан аргумент. Если это так, то он изменяется на указанный каталог (вы можете запустить его без аргумента, чтобы запустить в текущем каталоге или указать каталог - даже на другом диске, чтобы он начинался там).
Далее он удаляет все файлы в текущем каталоге. В этом режиме он не должен ничего перечислять и просто удалять файлы, не занимая много, если таковые имеются, памяти.
Затем он перечисляет папки в текущем каталоге и вызывает себя, передавая каждую папку ему (себе) для рекурсии вниз.
Причина, по которой это должно работать, состоит в том, что он не перечисляет каждый отдельный файл и папку во всем дереве . Он не перечисляет файлы вообще, а только перечисляет папки в текущем каталоге (плюс остальные в родительских каталогах). Предполагая, что в любой данной папке есть только несколько сотен подкаталогов, тогда это не должно быть слишком плохо, и, конечно, требует намного меньше памяти, чем другие методы, которые перечисляют все дерево.
Вы можете задаться вопросом об использовании /r ключа вместо (ручной) рекурсии. Это не сработает, потому что, хотя /r коммутатор выполняет рекурсию, он предварительно перечисляет все дерево каталогов, чего мы и хотим избежать; мы хотим удалить, как мы идем, не отслеживая.
Давайте сравним этот метод с методом полного перечисления.
Вы сказали, что у вас есть «миллионы каталогов»; скажем 100 миллионов. Если дерево приблизительно сбалансировано и предполагается, что в среднем около 100 подкаталогов на папку, то самый глубокий вложенный каталог будет примерно на четыре уровня ниже - на самом деле в целом дереве будет 101 010 100 подпапок. (Забавно, как 100M может сломаться до 100 и 4.)
Поскольку мы не перечисляем файлы, нам нужно отслеживать не более 100 имен каталогов на уровень, для максимального количества 4 × 100 = 400 каталогов в любой момент времени.
Следовательно, требования к памяти должны составлять
206,25 КБ, что находится в пределах любой современной (или иной) системы.
К сожалению (?) У меня нет системы с триллионами файлов в миллионах папок, поэтому я не могу ее протестировать (я считаю, по последним подсчетам, у меня было около
800 КБ файлов), поэтому кому-то еще придется попробовать Это.
Конечно, память - не единственное ограничение. Диск также будет большим узким местом, потому что для каждого файла и папки, которую вы удаляете, система должна пометить его как свободный. К счастью, многие из этих дисковых операций будут объединены вместе (кэшированы) и записаны в виде кусков, а не по отдельности (по крайней мере, для жестких дисков, а не для съемных носителей), но это все равно будет вызывать небольшие колебания, когда система читает и пишет данные.
Феерическая расстановка точек над i в вопросе удаления файлов из переполненной директории.
Прочитал статью Необычное переполнение жесткого диска или как удалить миллионы файлов из одной папки и очень удивился. Неужели в стандартном инструментарии Linux нет простых средств для работы с переполненными директориями и необходимо прибегать к столь низкоуровневым способам, как вызов getdents() напрямую.
Для тех, кто не в курсе проблемы, краткое описание: если вы случайно создали в одной директории огромное количество файлов без иерархии — т.е. от 5 млн файлов, лежащих в одной единственной плоской директории, то быстро удалить их не получится. Кроме того, не все утилиты в linux могут это сделать в принципе — либо будут сильно нагружать процессор/HDD, либо займут очень много памяти.
Так что я выделил время, организовал тестовый полигон и попробовал различные средства, как предложенные в комментариях, так и найденные в различных статьях и свои собственные.
Подготовка
Так как создавать переполненную директорию на своём HDD рабочего компьютера, потом мучиться с её удалением ну никак не хочется, создадим виртуальную ФС в отдельном файле и примонтируем её через loop-устройство. К счастью, в Linux с этим всё просто.
Создаём пустой файл размером 200Гб
Многие советуют использовать для этого утилиту dd, например dd if=/dev/zero of=disk-image bs=1M count=1M , но это работает несравнимо медленнее, а результат, как я понимаю, одинаковый.
Форматируем файл в ext4 и монтируем его как файловую систему
К сожалению, я узнал об опции -N команды mkfs.ext4 уже после экспериментов. Она позволяет увеличить лимит на количество inode на FS, не увеличивая размер файла образа. Но, с другой стороны, стандартные настройки — ближе к реальным условиям.
Создаем множество пустых файлов (будет работать несколько часов)
Кстати, если в начале файлы создавались достаточно быстро, то последующие добавлялись всё медленнее и медленнее, появлялись рандомные паузы, росло использование памяти ядром. Так что хранение большого числа файлов в плоской директории само по себе плохая идея.
Проверяем, что все айноды на ФС исчерпаны.
Размер файла директории
Теперь попробуем удалить эту директорию со всем её содержимым различными способами.
Тесты
После каждого теста сбрасываем кеш файловой системы
sudo sh -c 'sync && echo 1 > /proc/sys/vm/drop_caches'
для того чтобы не занять быстро всю память и сравнивать скорость удаления в одинаковых условиях.
Удаление через rm -r
$ rm -r /mnt/test_dir/
Под strace несколько раз подряд (. ) вызывает getdents() , затем очень много вызывает unlinkat() и так в цикле. Занял 30Мб RAM, не растет.
Удаляет содержимое успешно.
Т.е. удалять переполненные директории с помощью rm -r /путь/до/директории вполне нормально.
Удаление через rm ./*
$ rm /mnt/test_dir/*
Запускает дочерний процесс шелла, который дорос до 600Мб, прибил по ^C . Ничего не удалил.
Очевидно, что glob по звёздочке обрабатывается самим шеллом, накапливается в памяти и передается команде rm после того как считается директория целиком.
Удаление через find -exec
$ find /mnt/test_dir/ -type f -exec rm -v <> \;
Под strace вызывает только getdents() . процесс find вырос до 600Мб, прибил по ^C . Ничего не удалил.
find действует так же, как и * в шелле — сперва строит полный список в памяти.
Удаление через find -delete
$ find /mnt/test_dir/ -type f -delete
Вырос до 600Мб, прибил по ^C . Ничего не удалил.
Аналогично предыдущей команде. И это крайне удивительно! На эту команду я возлагал надежду изначально.
Удаление через ls -f и xargs
$ cd /mnt/test_dir/ ; ls -f . | xargs -n 100 rm
параметр -f говорит, что не нужно сортировать список файлов.
Создает такую иерархию процессов:
Удаление через perl readdir
$ perl -e 'chdir "/mnt/test_dir/" or die; opendir D, "."; while ($n = readdir D) < unlink $n >' (взял здесь)
Под strace один раз вызывает getdents() , потом много раз unlink() и так в цикле. Занял 380Кб памяти, не растет.
Удаляет успешно.
Получается, что использование readdir вполне возможно?
Удаление через программу на C readdir + unlink
$ gcc -o cleandir cleandir.c
$ ./cleandir
Под strace один раз вызывает getdents() , потом много раз unlink() и так в цикле. Занял 128Кб памяти, не растет.
Удаляет успешно.
Опять — же, убеждаемся, что использовать readdir — вполне нормально, если не накапливать результаты в памяти, а удалять файлы сразу.
Читайте также: