使用';rm-rf';在Linux PowerShell和Linux bash中
我需要在运行Ubuntu的远程机器上执行“rm-rf”,以清除指定的文件夹。 如果我像下面这样使用命令,一切都会好起来使用';rm-rf';在Linux PowerShell和Linux bash中,linux,bash,powershell,Linux,Bash,Powershell,我需要在运行Ubuntu的远程机器上执行“rm-rf”,以清除指定的文件夹。 如果我像下面这样使用命令,一切都会好起来 rm -rf "home/blahblah/blah"/* 但是如果我在Linux PowerShell中运行相同的命令,我将删除所有文件。 在bash和PS中,是否有任何方法指定要以相同方式处理的路径?谢谢大家! tl;dr 不幸的是,从PowerShell 7.0开始,您必须执行以下操作(如果要使用外部rm实用程序): 请注意,我已切换到路径周围的单引号(“…”),因此可
rm -rf "home/blahblah/blah"/*
但是如果我在Linux PowerShell中运行相同的命令,我将删除所有文件。
在bash和PS中,是否有任何方法指定要以相同方式处理的路径?谢谢大家! tl;dr
不幸的是,从PowerShell 7.0开始,您必须执行以下操作(如果要使用外部rm
实用程序):
请注意,我已切换到路径周围的单引号(“…”
),因此可以在双引号(“…
)字符串中使用它。虽然反向(“…”…“/*”
)应该按原样工作,但它当前需要额外的转义(“…\”…\“/*”
)-请参阅
但是,如果/*
前面的路径实际上不需要引号,特别是如果它不包含空格,则可以简单地调用:
rm -rf home/blahblah/blah/*
在处理由带引号和不带引号部分组成的字符串参数方面,PowerShell(从7.0开始)和类似POSIX的Shell(如Bash)之间存在着非常不幸的差异 PowerShell将“home/blahblah/blah”/*解析为两个参数:
成为第一个参数,与本例一样home/blahblah/blah
被解释为第二个参数,由于该参数不带引号且调用了外部实用程序,因此会触发PowerShell模拟POSIX类shell的globbing(文件名扩展)行为,这意味着根目录中的所有文件和目录都将作为单个参数传递/*
rm
实用程序实际接收的参数是:-rf
,home/blahblah/blah
,/bin
,/boot
,/dev
,…-这显然不是目的
中讨论了这种有问题的行为
将命令传递给类Unix平台上的默认shellsh
,可以绕过此问题。tl;dr
不幸的是,从PowerShell 7.0开始,您必须执行以下操作(如果要使用外部rm
实用程序):
请注意,我已切换到路径周围的单引号(“…”
),因此可以在双引号(“…
)字符串中使用它。虽然反向(“…”…“/*”
)应该按原样工作,但它当前需要额外的转义(“…\”…\“/*”
)-请参阅
但是,如果/*
前面的路径实际上不需要引号,特别是如果它不包含空格,则可以简单地调用:
rm -rf home/blahblah/blah/*
在处理由带引号和不带引号部分组成的字符串参数方面,PowerShell(从7.0开始)和类似POSIX的Shell(如Bash)之间存在着非常不幸的差异 PowerShell将“home/blahblah/blah”/*解析为两个参数:
成为第一个参数,与本例一样home/blahblah/blah
被解释为第二个参数,由于该参数不带引号且调用了外部实用程序,因此会触发PowerShell模拟POSIX类shell的globbing(文件名扩展)行为,这意味着根目录中的所有文件和目录都将作为单个参数传递/*
rm
实用程序实际接收的参数是:-rf
,home/blahblah/blah
,/bin
,/boot
,/dev
,…-这显然不是目的
中讨论了这种有问题的行为
将命令传递给类Unix平台上的默认shellsh
,可以绕过此问题