Эквивалент "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

Попробуйте использовать это:-

rmdir /s directory_name
Другие вопросы по тегам