Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用';rm-rf';在Linux PowerShell和Linux bash中_Linux_Bash_Powershell - Fatal编程技术网

使用';rm-rf';在Linux PowerShell和Linux bash中

使用';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实用程序): 请注意,我已切换到路径周围的单引号(“…”),因此可

我需要在运行Ubuntu的远程机器上执行“rm-rf”,以清除指定的文件夹。 如果我像下面这样使用命令,一切都会好起来

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平台上的默认shell
sh
,可以绕过此问题。

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平台上的默认shell
sh
,可以绕过此问题