Как удалить все файлы из каталога?

Ближайший я получил

# rm /path/to/directory/*.*

, но это не работает для файлов, у которых нет расширения ...

193 голоса | спросил user784637 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 06 Sep 2011 11:58:13 +0400 2011, 11:58:13

9 ответов


225

Linux не использует расширения. Разработчик файла должен решить, хочет ли он, чтобы имя имело расширение. Linux смотрит на 1-й байт, чтобы выяснить, с каким файлом он работает.

Чтобы удалить все в каталоге, используйте:

rm /path/to/directory/*

Вы можете использовать параметр -r, чтобы удалить все каталоги внутри каталога, в котором вы удаляете содержимое. В противном случае появится сообщение об ошибке, указывающее, что он не удаляет каталог.

ответил Rinzwind 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 06 Sep 2011 12:06:55 +0400 2011, 12:06:55
118
  • Чтобы удалить папку со всем ее содержимым (, включая все внутренние папки ):

    rm -rf /path/to/directory
    
  • Чтобы удалить все содержимое папки (, включая все внутренние папки ), но не сама папка:

    rm -rf /path/to/directory/*
    
  • Чтобы удалить все «файлы» изнутри папки ( не удаление внутренних папок ):

    rm -f /path/to/directory/*
    

Где:

  • rm - означает " удалить "
  • -f - означает « force », что полезно, если вы не хотите, чтобы вас спросили /предложили, если вы хотите удалить архив, например.
  • -r - означает « рекурсивный », что означает, что вы хотите рекурсивно перейти в каждую папку и удалить все.
ответил Lilian A. Moraru 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 07 Sep 2011 21:26:08 +0400 2011, 21:26:08
29

Чтобы удалить все файлы в каталоге (включая скрытые файлы и подкаталоги):

rm -rf /path/to/directory/{*,.*}
ответил Leonid V. Fedorenchik 23 72014vEurope/Moscow11bEurope/MoscowSun, 23 Nov 2014 12:38:10 +0300 2014, 12:38:10
7

Если вы хотите удалить только файлы в каталоге /path /to /, вы можете сделать

find /path/to/directory -type f -print0| xargs -0 rm 

или

find /path/to/directory -type f -exec rm '{}' \;

Вы можете делать нагрузки с помощью find, преимущество состоит в том, что вы можете перечислить найденное, не связывая его с rm, чтобы вы могли видеть, что будет удалено перед началом работы.

ответил Richard Holloway 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 06 Sep 2011 16:13:51 +0400 2011, 16:13:51
6

Если вы также хотите удалить все подкаталоги и сам каталог, вы можете использовать rm -rf /path/to/directory. Но всегда проверяйте свою линию, прежде чем нажимать return, rm -rf может вызвать много хавоков, например. если вы случайно вставляете пробел после первой косой черты при наличии прав суперпользователя ...

ответил Tobias Kienzler 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 07 Sep 2011 12:51:30 +0400 2011, 12:51:30
5

Чтобы удалить все файлы и каталоги (включая скрытые ) в каталоге, вы можете попробовать следующее:

  • удалите папку, затем заново создайте ее

    rm -rf dir_name && mkdir dir_name
    
  • используйте find

    find dir_name -mindepth 1 -delete  
    

Здесь мы указываем -mindepth 1 для исключения самого каталога dir_name.
Взгляните на следующую ссылку:
https : //unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

ответил zeekvfu 27 32013vEurope/Moscow11bEurope/MoscowWed, 27 Nov 2013 20:05:19 +0400 2013, 20:05:19
1

Вы можете cd в каталог, а затем запустите команду rm *.*, как в DOS, если вы помните.

ответил V K Mavani 1 Mayam13 2013, 04:59:20
0

Чтобы удалить текущий каталог, вы можете, например, использовать rm -d ./*

-d также сообщает об удалении каталогов.

ответил arviman 29 AM000000100000005331 2017, 10:17:53
-1

Поскольку этот вопрос постоянно находится на вершине Google, когда я сам его ищу:

Другие ответы страдают от различных проблем:

  1. Некоторые из них включают . и .., который является шумным, запутанным и раздражающим.

  2. Некоторые из них забывают скрытые файлы (файлы, начинающиеся с точки).

  3. Они не удаляются в правильном (в самом начале) порядке, чтобы разрешить удаление каталогов.

  4. Они спускаются в другие (смонтированные) файловые системы, что часто нежелательно.

  5. Их трудно расширить с помощью дополнительных параметров (подробнее об этом ниже).

Итак, чтобы РЕЗУЛЬТАТИВНО удалить все файлы И папки в каталоге, сделайте следующее:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

Обратите внимание, что я добавил аргумент -xdev, чтобы предотвратить спуск в mounts (например, /proc и т. д.).

Почему не -depth или -delete?

Несмотря на то, что люди постоянно сворачивают меня на это, эти методы имеют недостаток: похоже, что они достаточно расширяемы, чтобы позволить подкаталогу -prune вводить (не вводя больше проблем). В отличие от этого метода вы можете вставить

-not \( -path "${DIR}/subdir" -prune \)

перед аргументом -mindepth, чтобы исключить subdir из его содержимого.

ответил Mehrdad 21 Mayam18 2018, 03:54:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132