Самое близкое, которое я получил,
# rm /path/to/directory/*.*
но это не работает на файлы, которые не имеют расширения...
Linux не использует расширения. Это до создателя файла, чтобы решить, должно ли имя иметь расширение. Linux смотрит на первые несколько байтов для выяснения, с каким файлом он имеет дело.
Удалить все нескрытые файлы* в использовании каталога:
rm /path/to/directory/*
Однако это покажет ошибку для каждого подкаталога, потому что в этом режиме только позволяется удалить файлы.
Удалить все нескрытые файлы и подкаталоги (наряду со всем их содержанием) в использовании каталога:
rm -r /path/to/directory/*
* Скрытые файлы и каталоги - те, имена которых запускаются с .
(точечный) символ, например: .hidden-file
или .hidden-directory/
. Обратите внимание что, в Bash, если dotglob
опция (который является прочь по умолчанию) установлена, rm
будет действовать на скрытые файлы также, потому что они будут включены когда *
расширен оболочкой для обеспечения списка аргументов имени файла.
Удалить папку со всем ее содержанием (включая все внутренние папки):
rm -rf /path/to/directory
Удалить все содержание папки (включая все внутренние папки), но не саму папку:
rm -rf /path/to/directory/*
или
rm -rf /path/to/directory/{*,.*}
если Вы хотите удостовериться, что скрытые файлы/каталоги также удалены.
Удалить все "файлы" из папки (не удаляющий внутренние папки):
rm -f /path/to/directory/{*,.*}
Предупреждение: если у Вас есть пробелы в Вашем пути, удостоверьтесь, что всегда использовали кавычки.
rm -rf /path/to the/directory/*
эквивалентно 2 отдельным rm -rf
вызовы:
rm -rf /path/to
rm -rf the/directory/*
Для предотвращения этой проблемы можно использовать '
одинарные кавычки'
(не разворачивает переменные оболочки), или "
двойные кавычки"
(разворачивает переменные оболочки):
rm -rf "/path/to the/directory/"*
Где:
rm
- обозначает, "удаляют"-f
- обозначает "силу", которая полезна, когда Вы не хотите быть спрошенными/запрошенными, если Вы хотите удалить архив, например.-r
- обозначает "рекурсивный", что означает, что Вы хотите пойти рекурсивно вниз каждая папка и удалить все.Если Вы хотите удалить только файлы в/path/to/directory, можно сделать
find /path/to/directory -type f -print0| xargs -0 rm
или
find /path/to/directory -type f -exec rm '{}' \;
Можно сделать загрузки с find
, преимущество - Вы, может перечислить то, что найдено, не передавая его по каналу к rm
таким образом, Вы видите то, что будет удалено перед запуском.
Если Вы также хотите удалить все подкаталоги и сам каталог, можно использовать rm -rf /path/to/directory
. Но всегда перепроверяйте свою строку перед нажимающим возвратом, rm -rf
может вызвать много опустошения также, например, если Вы случайно вставляете пробел после первой наклонной черты при наличии полномочий суперпользователя...
Вы можете cd
в каталог и затем выполненный команда rm *.*
точно так же, как в DOS, если Вы помните.
Для удаления всех файлов и каталогов (включая скрытые) в каталоге можно попробовать следующее:
удалите папку, затем воссоздайте ее
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
Удалить все файлы в каталоге (включая скрытые файлы и подкаталоги) выполненный:
rm -rf /path/to/directory/{*,.*}
Для удаления текущего каталога Вы могли, например, использовать rm -d ./*
- d говорит для удаления каталогов также.
Так как этот вопрос постоянно наверху Google, когда я ищу это сам:
Другие ответы страдают от различных проблем:
Некоторые из них включают .
и ..
который является шумным, сбивает с толку, и является раздражающим.
Некоторые из них забывают скрытые файлы (файлы, начинающиеся с точки).
Они не удаляют в корректном (самый глубокий первый) порядок позволить удаление каталога.
Они убывают в другие (смонтированные) файловые системы, который часто нежелателен.
Их трудно расширить правильно с дополнительными параметрами (больше на этом ниже).
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
аргумент для предотвращения убывания в монтирование (как /proc
и т.д.).
-depth
или -delete
?Несмотря на людей постоянно downvoting меня для этого, те методы имеют оборотную сторону: не кажется, что они достаточно расширяемы для разрешения -prune
луг подкаталог (не представляя больше проблем). В отличие от этого, с этим методом, Вы могли вставить
-not \( -path "${DIR}/subdir" -prune \)
перед -mindepth
аргумент для исключения subdir
от удаления его содержания.