gsutil rsync 排除模式不适用于 Windows Powershell
gsutil rsync exclude patterns not working on Windows Powershell
我正在尝试在 powershell 中使用 gsutil rsync 将文件复制到 gs 存储桶,忽略一些文件扩展名,但我收到错误提示“.*.scss”不是命令:
PS W:\> gsutil -m rsync -x ".*^.gz$^|.*^.scss$^|.*^.less$^|.*^.pdf$^|.*^.zip$" -d -r ./ gs://BUCKET
'.*.scssecho' is not recognized as an internal or external command
operable program, or a batch file.
# With the originally proposed solution:
PS W:\> gsutil -m rsync -x '.*\.(gz|scss|less|pdf|zip)$' -d -r ./ gs://BUCKET
'scss' is not recognized as an internal or external command,
operable program, or a batch file.
documentation 有说明使用 ^
作为转义字符而不是 \
并转义 |
字符。我错过了什么?
使用单引号 ('...'
),这会阻止 PowerShell 解释字符串,尤其是 $
字符。在里面。
由于您将正则表达式传递给 rsync
,因此请使用通常的 \
-转义来转义 regex 元字符,例如作为 .
奇怪的是,gsutil
另外需要cmd.exe
个元字符^
转义, 不考虑调用 shell 和原始引用 ,在这种情况下意味着 |
必须转义为 ^|
# From PowerShell
gsutil -m rsync -x '.*\.gz$^|.*\.scss$^|.*\.less$^|.*\.pdf$^|.*\.zip$' -d -r ./ gs://BUCKET
此外,您的正则表达式可以简化:
# From PowerShell
gsutil -m rsync -x '.*\.(gz^|scss^|less^|pdf^|zip)$' -d -r ./ gs://BUCKET
一般分转义和引用:
只有在cmd.exe
中,^
作为转义字符;在 PowerShell 中,它是 `
(反引号)。
另请注意,在 cmd.exe
中,您只需要在 未引用 参数中使用 ^
,而不是在 "..."
.
中
在 PowerShell 中,'...'
字符串按字面意义(逐字)并且根本不需要转义(除了 '
本身作为 ''
)。
内部"..."
,可扩展字符串,必须使用`
选择性转义$
个字符作为字面量,也可以使用转义序列如`n
嵌入 控制字符 (在本例中为换行符),并且在 PowerShell [Core] 6+ 中,另外通过代码点嵌入 Unicode 代码字符(例如 `u{40}
表示 @
个字符。)
由于它是一个 .cmd 脚本,您也可以从 cmd 或 .bat 文件中 运行
编辑:所以它是一个调用 python 脚本的 .cmd 脚本。如果你调用这个而不是 .cmd 文件,它可能会更好:
# gsutil.ps1
c:\python27\python.exe c:\gsutil\gsutil $args
所以用单引号:
.\gsutil.ps1 -m rsync -x '.*^.gz$^|.*^.scss$^|.*^.less$^|.*^.pdf$^|.*^.zip$' -d -r ./ gs://BUCKET
编辑 2:
运行 python 直接脚本。 (如果 gsutil.cmd 被隐藏,你可以删除 .py。)
$env:path += ';c:\gsutil'
$env:pathext += ';.py'
gsutil.py -m rsync -x '.*^.gz$^|.*^.scss$^|.*^.less$^|.*^.pdf$^|.*^.zip$' -d -r ./ gs://BUCKET
使用 $env:pathext 因此调用 .py 文件不会打开新的 window:https://superuser.com/questions/437790/run-python-scripts-in-powershell-directly
我正在尝试在 powershell 中使用 gsutil rsync 将文件复制到 gs 存储桶,忽略一些文件扩展名,但我收到错误提示“.*.scss”不是命令:
PS W:\> gsutil -m rsync -x ".*^.gz$^|.*^.scss$^|.*^.less$^|.*^.pdf$^|.*^.zip$" -d -r ./ gs://BUCKET
'.*.scssecho' is not recognized as an internal or external command
operable program, or a batch file.
# With the originally proposed solution:
PS W:\> gsutil -m rsync -x '.*\.(gz|scss|less|pdf|zip)$' -d -r ./ gs://BUCKET
'scss' is not recognized as an internal or external command,
operable program, or a batch file.
documentation 有说明使用 ^
作为转义字符而不是 \
并转义 |
字符。我错过了什么?
使用单引号 (
'...'
),这会阻止 PowerShell 解释字符串,尤其是$
字符。在里面。由于您将正则表达式传递给
rsync
,因此请使用通常的\
-转义来转义 regex 元字符,例如作为.
奇怪的是,
gsutil
另外需要cmd.exe
个元字符^
转义, 不考虑调用 shell 和原始引用 ,在这种情况下意味着|
必须转义为^|
# From PowerShell
gsutil -m rsync -x '.*\.gz$^|.*\.scss$^|.*\.less$^|.*\.pdf$^|.*\.zip$' -d -r ./ gs://BUCKET
此外,您的正则表达式可以简化:
# From PowerShell
gsutil -m rsync -x '.*\.(gz^|scss^|less^|pdf^|zip)$' -d -r ./ gs://BUCKET
一般分转义和引用:
只有在cmd.exe
中,^
作为转义字符;在 PowerShell 中,它是 `
(反引号)。
另请注意,在 cmd.exe
中,您只需要在 未引用 参数中使用 ^
,而不是在 "..."
.
在 PowerShell 中,'...'
字符串按字面意义(逐字)并且根本不需要转义(除了 '
本身作为 ''
)。
内部"..."
,可扩展字符串,必须使用`
选择性转义$
个字符作为字面量,也可以使用转义序列如`n
嵌入 控制字符 (在本例中为换行符),并且在 PowerShell [Core] 6+ 中,另外通过代码点嵌入 Unicode 代码字符(例如 `u{40}
表示 @
个字符。)
由于它是一个 .cmd 脚本,您也可以从 cmd 或 .bat 文件中 运行
编辑:所以它是一个调用 python 脚本的 .cmd 脚本。如果你调用这个而不是 .cmd 文件,它可能会更好:
# gsutil.ps1
c:\python27\python.exe c:\gsutil\gsutil $args
所以用单引号:
.\gsutil.ps1 -m rsync -x '.*^.gz$^|.*^.scss$^|.*^.less$^|.*^.pdf$^|.*^.zip$' -d -r ./ gs://BUCKET
编辑 2:
运行 python 直接脚本。 (如果 gsutil.cmd 被隐藏,你可以删除 .py。)
$env:path += ';c:\gsutil'
$env:pathext += ';.py'
gsutil.py -m rsync -x '.*^.gz$^|.*^.scss$^|.*^.less$^|.*^.pdf$^|.*^.zip$' -d -r ./ gs://BUCKET
使用 $env:pathext 因此调用 .py 文件不会打开新的 window:https://superuser.com/questions/437790/run-python-scripts-in-powershell-directly