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

Самое близкое, что я получил, это

# 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/torm -rf the/directory/*

Чтобы избежать этой проблемы, вы можете использовать 'одинарные кавычки'(предотвращает все расширения, даже переменных оболочки) или "двойные кавычки"(позволяет расширять переменные оболочки, но предотвращает другие расширения):

rm -rf "/path/to the/directory/"*

Где:

  • rm - расшифровывается как удалить
  • -f - расшифровывается как сила что полезно, когда вы не хотите, чтобы вас спрашивали / запрашивали, хотите ли вы удалить архив, например.
  • -r - расшифровывается как рекурсивный это означает, что вы хотите рекурсивно пройти по каждой папке и удалить все.

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

rm -rf /path/to/directory/{*,.*}

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

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

    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

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

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 это также может привести к большому хаосу, например, если вы случайно вставите пробел после первой косой черты, имея права суперпользователя...

Поскольку этот вопрос постоянно находится в верхней части 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 аргумент для предотвращения спуска в горы (например /proc и т.д.).

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

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

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

до того, как -mindepth аргумент для исключения subdir от удаления его содержимого.

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

-d также указывает на удаление каталогов.

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

Смотрите Ответ здесь, это также может удалить скрытые файлы без какого-либо предупреждения и удаления самого каталога ubuntu - Delete contents but not directory in Linux? - Stack Overflow

У меня недостаточно репутации, чтобы добавить реальный ответ, но при использовании решения shopt -s dotglob && rm /path/to/directory /* в bash, (shopt -s dotglob && rm /path/to/directory/*) (в круглых скобках) предотвратит утечку "shopt -s dotglob` за пределы этой одной команды. (В круглых скобках выполняются содержащиеся команды в подоболочке.)