Самое близкое, что я получил, это
# rm /path/to/directory/*.*
но это не работает для файлов, у которых нет расширения...
Самое близкое, что я получил, это
# 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, когда я сам его ищу:
Другие ответы страдают от разных проблем:
Некоторые из них включают .
и ..
что шумно, сбивает с толку и раздражает.
Некоторые из них забывают скрытые файлы (файлы, начинающиеся с точки).
Они не удаляются в правильном (самом глубоком) порядке, чтобы разрешить удаление каталога.
Они переходят в другие (смонтированные) файловые системы, что часто нежелательно.
Их трудно правильно расширить с помощью дополнительных параметров (подробнее об этом ниже).
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` за пределы этой одной команды. (В круглых скобках выполняются содержащиеся команды в подоболочке.)