Эквивалент "rm -rf" для Windows PowerShell?
Я уже читал вопрос "rm -rf" эквивалент для Windows?. И я также пробовал следующие команды:
$ rm app
$ rmdir /s /q app
$ rmdir -s -q app
$ rd /s /q app
и многие другие варианты. Он всегда подсказывает мне:
У элемента в C:\ThisDirectoryDoesNotExist\app\ есть дочерние элементы, и параметр Recurse не указан. Если вы продолжите, все дочерние элементы будут удалены вместе с элементом. Вы уверены что хотите продолжить?
[Y] Да [A] Да для всех [N] Нет [L] Нет для всех [S] Приостановить [?] Справка (по умолчанию "Y"): A
И когда я выбираю A
, выдает ошибку:
rm: невозможно удалить элемент C:\ThisDirectoryDoesNotExist\app.git\objects\pack\pack-45e426475eb08ff5042bf88556fbedd3956fba53.idx: у вас недостаточно прав доступа для выполнения этой операции.
Как мне это сделать?
2 ответа
Просто укажите параметр рекурсии, как предлагается:
rm -r app
Если в папке есть скрытые файлы, добавьте -Force
параметр:
rm -r -fo app
Это краткая форма:
Remove-Item -Recurse -Force -Path app
Если у вас нет соответствующих прав доступа, то вы, конечно, не можете удалить его.
Задний план
rmdir
а также rd
- это команды (не исполняемые файлы), которые можно вызывать из командной строки. rm
по умолчанию недоступен. Все три термина могут также указывать на исполняемые файлы, например, если у вас установлена среда MinGW. Но они не будут доступны в PowerShell, потому что PowerShell использует эти слова как псевдонимы для командлета.Remove-Item
:
PS> 'rm', 'rmdir', 'rd' | Get-Command
CommandType Name Version Source
----------- ---- ------- ------
Alias rm -> Remove-Item
Alias rmdir -> Remove-Item
Alias rd -> Remove-Item
Если у вас есть некоторые инструменты, доступные в виде исполняемых файлов, вы все равно можете получить к ним доступ в PowerShell, указав к ним полный путь, например:
PS> C:\path\to\MinGW\msys\1.0\bin\rm.exe
Но давайте придерживаться Remove-Item
. Поскольку это командлет, он ожидает определенных параметров или переключателей, например-Recurse
. Вы можете сокращать их до тех пор, пока они не останутся однозначными по сравнению с другими возможными параметрами. Поэтому вы можете использовать:
rm -r
который выглядит, например, как в bash, где вы также можете передать два параметра следующим образом:
rm -rf
Когда вы отправляете эту команду в PowerShell, она пытается сопоставить -rf
параметру, который начинается с rf
, которого не существует. В PowerShell вы должны передавать каждый параметр индивидуально в командлет. Чтобы пройти-Force
параметр, вы должны написать не менее -fo
, потому что есть еще параметр -Filter
и поэтому -f
было бы неоднозначно.
В заключение, чтобы получить эквивалент rm -rf
из bash в PowerShell вы должны написать как минимум:
rm -r -fo