Будет rm -rf *
удалить все файлы/папки в текущем каталоге? Я хочу удостовериться подстановочный знак *
не переместится вверх в верхних каталогах и сотрет всю мою файловую систему.:D
Я не забываю делать chmod 777 .* -R
кому: chmod
скрытые файлы и это chmod
редактор вся моя файловая система. Очевидно, я был на корневой учетной записи.
Нет, если Вы не настраивали свою оболочку много, это не удалит файлы или каталоги, запускающиеся с a .
. Для удаления их также, можно или перечислить их явно
rm -rf .file .dir
или используйте правильные шаблоны шарика (благодарит Chris),
rm -rf .[^.]* ..?*
ОТРЕДАКТИРУЙТЕ точку, вот то, что Вы не можете использовать .*
соответствовать файлам как .file
, потому что .*
или .*?
будет также соответствовать ..
или .
. .[^.]*
файлы соответствий как .file
, в то время как ..?*
файлы соответствий как ..foo
(*
нуль соответствий или больше символов, в то время как ?
соответствия точно одно).
Если Вы хотите удалить каталог и все его содержание, Вы можете chdir
в родительский каталог и их rm -rf
тот каталог по имени, обходя весь globbing вопрос. Если Вы хотите удалить содержание, но сохранять каталог, является самым легким удалить все и затем воссоздать каталог.
Это сложно для предложения шарика, который будет соответствовать всем возможным записям каталога, сохраняют. и..; легко придумать простой ответ (например, * .??*
) это будет работать почти всегда на практике. Это хорошо для интерактивного использования, так как легко помнить, и времена, это не работает, могут быть пойманы с посткомнатой ls -a
. Для сценария легче сделать удаление всех и воссоздать пустой каталог.
Да. комната-rf только удалит файлы и папки в текущем каталоге, и не возрастет дерево файла. комната не будет также следовать за символьными ссылками и удалять файлы, на которые они указывают, таким образом, Вы случайно не сокращаете другие части своей файловой системы.
Так как я думаю, что этот вопрос больше о том, что * делает (и не комната), давайте попробуем другой подход.
Если Вы не уверены, что * делает, можно "протестировать" сначала использование безопасной команды как эхо. Перед выполнением этого попытайтесь предположить то, что они покажут, выполняете ли Вы их в своем домашнем dir.
echo *
echo .*
Но сначала давайте создадим детскую площадку, таким образом, мы можем играть со звездами и видеть то, с чем мы заканчиваем.
mkdir ~/star_test/
cd ~/star_test/
>.file1
>file2
Теперь в этом dir у нас есть это:
cj@zap:~/star_test$ ls -1a
.
..
.file1
file2
Теперь заметьте то, что * разворачивает в использование команды эха:
cj@zap:~/star_test$ echo *
file2
cj@zap:~/star_test$ echo .*
. .. .file1
Поэтому давайте посмотрим то, что происходит с командой комнаты
cj@zap:~/star_test$ rm -rf *
cj@zap:~/star_test$ ls -1a
.
..
.file1
Поскольку Вы видите, что он действительно только удалял file2, с тех пор * только расширенный до file2. Если бы Вы ввели бы комнату-rf.*, который совпал бы с записью
rm -rf . .. .file1
И честно говоря, которые не выглядят забавными ;)
Надежда это разъясняется * часть Вашего вопроса.
Обновление: Однако как точки Ankur Goel там некоторая защита, встроенная в комнату (довольно необычный для команд оболочки :)
Давайте создадим новую детскую площадку:
cd ~/star_test/
mkdir -p test1/test2/test3
sudo chown root.root test1
cd test1/test2/test3/
>.file1
>file2
Таким образом, теперь у нас есть это снова, но с test1, принадлежавшим корню как защита, если комната начинает приходить в бешенство.
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2 .file1
cj@zap:~/star_test/test1/test2/test3$ echo .*
. .. .file1
Поэтому давайте удалим все:
cj@zap:~/star_test/test1/test2/test3$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2
И похоже, что комната не удалила. и.. даже если мы сказали ему!!!
Таким образом, после этого длинного ответа оказывается безопасным удалить все в dir с этим:
rm -rf * .*
Но я использовал бы это с осторожностью, так как я не уверен, что все реализации комнаты ведут себя как это!
Если Вы не хотите перемещать один уровень вверх как сказанный mpez0 и rm -rf
эта определенная папка, существует способ работать над всеми каталогами/файлами кроме .
и ..
в текущей папке путем выполнения:
rm -rf $(ls -A)
Конечно, если какой-либо из каталогов/файлов содержит один из символов в оболочке IFS
специальная переменная (например, пространство, вкладка, новая строка), Вы могли бы хотеть изменить IFS сначала, выполнить команду, затем восстановить IFS.