Самое близкое, что я получил, это
# 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 (...)