Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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
Powershell gsutil cp命令如何复制超过x分钟的文件?_Powershell_Rsync_Cp - Fatal编程技术网

Powershell gsutil cp命令如何复制超过x分钟的文件?

Powershell 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

当前用于将文件和子目录递归归档到云存储桶的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 bucket


在上面,我假设不需要参数-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
    设置为
    gsutil
    期望的字符编码,以便正确传递带有非ASCII字符的文件名;在PowerShell[Core]6+中,
    $outpuneCoding
    默认为UTF-8

  • 在PowerShell[Core]6+中,不再需要使用
    ForEach Object FullName
    命令,因为
    Get ChildItem
    输出的实例会一致地隐式字符串化为其
    .FullName
    属性的值

  • 如果你的问题还没有完全回答,请考虑回答或提供反馈。