Как команда gsutil cp может копировать файлы старше x минут? - PullRequest
0 голосов
/ 27 февраля 2020

Текущий скрипт Powershell, используемый для рекурсивного архивирования файлов и подкаталогов в облачное хранилище, выглядит следующим образом:

gsutil rsyn c -u -r - C M: \ backups gs: // archive -bucket

https://cloud.google.com/storage/docs/gsutil/commands/cp

Это прекрасно работает, однако мне нужен фильтр, который влияет только на файлы старше x минут. Основываясь на документированной возможности (см. Ссылку выше) возможности конвейерной передачи в списке файлов, я хотел бы применить правило отметки времени для создания отфильтрованного списка всех файлов и подкаталогов в M: \ backups рекурсивно с некоторым сценарием, представленным заполнитель "list_generator" в via -I, стандартный ввод, предоставленный с помощью cp вместо rsyn c, примерно так:

list_generator | gsutil -m cp -n -r - c -I gs: // archive-bucket

Выше я предполагаю, что аргумент -r не понадобится, поскольку рекурсивное действие будет перемещено в предыдущая подпрограмма представлена ​​list_generator, в то время как аргументы -n и - c необходимо сохранить, чтобы предотвратить перезапись назначения и обеспечить обработку ошибок.

1 Ответ

0 голосов
/ 27 февраля 2020

Ваш вопрос сводится к тому, как получить список путей к этому файлу в дереве каталогов M:\backups, чья последняя измененная отметка времени (LastWriteTime) старше x минут a go:

$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 + , $OutputEncoding по умолчанию используется UTF-8.

  • В PowerShell [Core] 6 + , Команда ForEach-Object FullName больше не требуется, поскольку экземпляры System.IO.FileInfo выводятся с помощью Get-ChildItem, а затем последовательно неявно приводят к значению их свойств .FullName.

...