Как удалить все файлы в папке
Удаляет один или несколько файлов. Эта команда выполняет те же действия, что и команда Erase .
команда del также может запускаться из консоли восстановления Windows с использованием различных параметров. дополнительные сведения см. в разделе Windows среды восстановления (WinRE).
Если удалить файл с диска с помощью Del , вы не сможете получить его.
Синтаксис
Параметры
- файлы r только для чтения
- h скрытые файлы
- я не проиндексированные файлы содержимого
- системные файлы
- файлы , готовые к архивации
- l точки повторного анализа
- — Используется в качестве префикса, означающего «not»
Комментарии
При использовании del /p команды вы увидите следующее сообщение:
FileName, Delete (Y/N)?
Чтобы подтвердить удаление, нажмите клавишу Y. Чтобы отменить удаление и отобразить следующее имя файла (если указана группа файлов), нажмите клавишу N. Чтобы закрыть команду Del , нажмите клавиши CTRL + C.
Если вы отключаете расширение команды, параметр /s отображает имена всех файлов, которые не были найдены, а не отображает имена удаляемых файлов.
Если указать определенные папки в <names> параметре, все включаемые файлы также будут удалены. Например, если нужно удалить все файлы в папке \ворк , введите:
Можно использовать подстановочные знаки ( * и ?) для удаления нескольких файлов за раз. Однако во избежание непреднамеренного удаления файлов следует использовать подстановочные знаки с осторожностью. Например, если ввести следующую команду:
Команда Del выводит следующее сообщение:
Are you sure (Y/N)?
Чтобы удалить все файлы в текущем каталоге, нажмите клавишу Y и нажмите клавишу ВВОД. Чтобы отменить удаление, нажмите клавишу N и нажмите клавишу ВВОД.
Прежде чем использовать подстановочные знаки с командой Del , используйте те же подстановочные знаки с командой dir , чтобы получить список всех файлов, которые будут удалены.
Примеры
Чтобы удалить все файлы в папке с именем Test на диске C, введите следующую команду:
Чтобы удалить все файлы с расширением имени файла .bat из текущего каталога, введите:
Как удалить все файлы и папки в папку на cmd вызов
Я хочу удалить все файлы и папки в папку на системный вызов.
Я могу называть так:
знаете ли вы более простой способ?
9 ответов
Нет, я не знаю ни одного.
если вы хотите сохранить исходный каталог по какой-либо причине (ACLs, &c.), и вместо этого очень хочется его опорожнить, тогда можно сделать следующее:
это сначала удаляет все файлы из директории, а затем рекурсивно удаляет все вложенные каталоги, но в целом сохраняя директории верхнего уровня «как есть» (за исключением содержания).
обратите внимание, что в пакетном файле вам нужно удвоить % внутри for петля:
del c:\destination\*.* /s /q работал для меня. Надеюсь, это сработает и для тебя.
Я думаю, самый простой способ сделать это:
последняя «\» в пути является важной частью.
Если имена вложенных папок могут содержать пробелы, их необходимо окружить экранированными кавычками. В следующем примере показано это для команд, используемых в пакетном файле.
да! Используйте Powershell:
удалить папку со всеми файлами в ней:
удалить все файлы из определенной папки (не удаляя саму папку) немного сложнее. del /s *.* не удается удалить папки, но удаляет файлы из всех вложенных папок. Поэтому необходимы две команды:
вы можете создать скрипт для удаления всего, что вы хотите (папка или файл), как это mydel.bat :
несколько примеров использование:
один простой однострочный вариант-создать пустой каталог где-нибудь в файловой системе, а затем использовать ROBOCOPY (http://technet.microsoft.com/en-us/library/cc733145.aspx) с /MIR переключатель для удаления всех файлов и вложенных папок. По умолчанию robocopy не копирует безопасность, поэтому ACL в корневой папке должны оставаться нетронутыми.
также, вероятно, хотите установить значение для переключателя повтора, /r , потому что число попыток по умолчанию равно 1 миллион.
У меня была индексная папка с 33 папками, в которых нужно было удалить все файлы и подпапки. Я открыл командную строку в папке индекса, а затем использовал следующие команды:
Я разделил их на две строки (нажмите enter после первой строки, и когда вас попросят добавить вторую строку), потому что если ввести одну строку, это может не сработать. Эта команда удалит каждый каталог, а затем создаст новый, который будет пустым, таким образом, удаляя все файлы и подпапки в оригинальный каталог.
Так как же удалить миллионы файлов из одной папки?
Феерическая расстановка точек над i в вопросе удаления файлов из переполненной директории.
Прочитал статью Необычное переполнение жесткого диска или как удалить миллионы файлов из одной папки и очень удивился. Неужели в стандартном инструментарии Linux нет простых средств для работы с переполненными директориями и необходимо прибегать к столь низкоуровневым способам, как вызов getdents() напрямую.
Для тех, кто не в курсе проблемы, краткое описание: если вы случайно создали в одной директории огромное количество файлов без иерархии — т.е. от 5 млн файлов, лежащих в одной единственной плоской директории, то быстро удалить их не получится. Кроме того, не все утилиты в linux могут это сделать в принципе — либо будут сильно нагружать процессор/HDD, либо займут очень много памяти.
Так что я выделил время, организовал тестовый полигон и попробовал различные средства, как предложенные в комментариях, так и найденные в различных статьях и свои собственные.
Подготовка
Так как создавать переполненную директорию на своём HDD рабочего компьютера, потом мучиться с её удалением ну никак не хочется, создадим виртуальную ФС в отдельном файле и примонтируем её через loop-устройство. К счастью, в Linux с этим всё просто.
Создаём пустой файл размером 200Гб
Форматируем файл в ext4 и монтируем его как файловую систему
Создаем множество пустых файлов (будет работать несколько часов)
Проверяем, что все айноды на ФС исчерпаны.
Размер файла директории
Теперь попробуем удалить эту директорию со всем её содержимым различными способами.
Тесты
После каждого теста сбрасываем кеш файловой системы
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 говорит, что не нужно сортировать список файлов.
Создает такую иерархию процессов:
ls -f в данной ситуации ведет себя адекватнее, чем find и не накапливает список файлов в памяти без необходимости. ls без параметров (как и find ) — считывает список файлов в память целиком. Очевидно, для сортировки. Но этот способ плох тем, что постоянно вызывает rm , чем создается дополнительный оверхед.
Из этого вытекает ещё один способ — можно вывод ls -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 — вполне нормально, если не накапливать результаты в памяти, а удалять файлы сразу.