Powershell gsutil cp命令如何复制超过x分钟的文件?
当前用于将文件和子目录递归归档到云存储桶的Powershell脚本如下所示: gsutil rsync-u-r-cm:\backups gs://archive bucket 这很好,但是我需要一个过滤器,只影响超过x分钟的文件。基于文件列表中的管道功能(见上面的链接),我想应用时间戳规则生成M:\backups下所有文件和子目录的过滤列表,使用占位符“list_generator”表示的脚本递归地输入via-I,via-I是标准输入,由cp而不是rsync提供,大致如下: 列表| generator | gsutil-mcp-n-r-c-igs://archive bucketPowershell gsutil cp命令如何复制超过x分钟的文件?,powershell,rsync,cp,Powershell,Rsync,Cp,当前用于将文件和子目录递归归档到云存储桶的Powershell脚本如下所示: gsutil rsync-u-r-cm:\backups gs://archive bucket 这很好,但是我需要一个过滤器,只影响超过x分钟的文件。基于文件列表中的管道功能(见上面的链接),我想应用时间戳规则生成M:\backups下所有文件和子目录的过滤列表,使用占位符“list_generator”表示的脚本递归地输入via-I,via-I是标准输入,由cp而不是rsync提供,大致如下: 列表| gener
在上面,我假设不需要参数-r,因为递归操作将被重新定位到前面的例程中,该例程由list_generator表示,而-n和-c参数需要保留,以防止目标覆盖并提供错误处理。您的问题归结为如何在
M:\backups
的目录树中获取上次修改的时间戳(LastWriteTime
)早于x分钟的文件路径列表:
$cutoffDate = (Get-Date).AddMinutes(-20) # example: 20 minutes
Get-ChildItem -File -Recurse M:\backups |
Where-Object LastWriteTime -lt $cutoffDate |
ForEach-Object FullName |
gsutil -m cp -n -c -I gs://archive-bucket
注:
- 在Windows PowerShell中,您必须将首选项变量
设置为$OutputEncoding
期望的字符编码,以便正确传递带有非ASCII字符的文件名;在PowerShell[Core]6+中,gsutil
默认为UTF-8$outpuneCoding
- 在PowerShell[Core]6+中,不再需要使用
命令,因为ForEach Object FullName
输出的实例会一致地隐式字符串化为其Get ChildItem
属性的值.FullName
如果你的问题还没有完全回答,请考虑回答或提供反馈。