Самое близкое, что я получил, это
# rm /path/to/directory/*.*
но это не работает для файлов, которые не имеют расширения ...
Самое близкое, что я получил, это
# rm /path/to/directory/*.*
но это не работает для файлов, которые не имеют расширения ...
Ответы:
Linux не использует расширения. Создатель файла должен решить, хочет ли он, чтобы имя имело расширение. Linux смотрит на 1-й байт, чтобы выяснить, с каким файлом он имеет дело.
Чтобы удалить все в каталоге, используйте:
rm /path/to/directory/*
Вы можете использовать -r
опцию, например:
rm -r /path/to/directory/*
также удалить любые подкаталоги (вместе со всем их содержимым) внутри каталога, содержимое которого вы удаляете. В противном случае будет отображена ошибка, сообщающая, что каталог не удаляется.
all files
;) *.*
означает все файлы, содержащие .
где-то в названии
*a*
означает ноль или более символов, за которыми a
следует ноль или более символов. Это будет соответствовать имена файлов happy
, apple
, a
или la
.
Чтобы удалить папку со всем ее содержимым ( включая все внутренние папки ):
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
- означает « рекурсивный », что означает, что вы хотите рекурсивно пройтись по каждой папке и удалить все.rm -rf /path/to/directory/*
не удаляет скрытый файл в папке, например .htaccess
. Может быть rm -rf /path/to/directory/.
? Не пробовал это.
rm -rf /path/to/directory/.*
удаляет только скрытые файлы в указанном каталоге. Глядя на комментарий @ danjjl к ответу @ Rinzwind, чтобы также удалить скрытые файлы, запустите shopt -s dotglob
перед запуском rm -rf /path/to/directory/*
.
rm -rf /path/to/directory/.*
в моей системе вызвано удаление элементов в /path/to
. К счастью, я только что скопировал все свои данные на отдельный диск. Само собой разумеется, НЕ rm -rf /path/to/directory/.*
вводите команду, если вы не сделали резервную копию всего своего компьютера в отдельном / безопасном месте!
Чтобы удалить все файлы в каталоге (включая скрытые файлы и подкаталоги), выполните:
rm -rf /path/to/directory/{*,.*}
./
и ../
, но он все равно будет удалить скрытые файлы.
rm -r $(pwd)/{*,.*}
Если вы хотите удалить только файлы в каталоге / path / to /, вы можете сделать
find /path/to/directory -type f -print0| xargs -0 rm
или же
find /path/to/directory -type f -exec rm '{}' \;
Вы можете выполнять загрузку с помощью find
, преимущество в том, что вы можете перечислить то, что найдено, не передавая его по трубопроводу, rm
чтобы вы могли видеть, что будет удалено перед началом работы.
GNU find
в качестве -delete
предиката. Если вы все еще хотите использовать -exec
, замена \;
с +
будет собирать rm
вызовы вместе, повышая эффективность.
Чтобы удалить все файлы и каталоги (включая скрытые ) в каталоге, вы можете попробовать следующее:
удалить папку, а затем воссоздать ее
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 -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
из его содержимого.
-depth
флаг find
для этого.
-delete
сfind
? -delete
в глубину Вы уже принимаете не POSIX find
с -printf
, так что вы также можете использовать -delete
или-depth -print0 | xargs -0 rm
-not \( -path "$DIR/subdir" \)
... а мой работает? Почему?
shopt -s dotglob
перед запускомrm (...)