【问题标题】:Getting the timestamp of a file from a SFTP server using ls使用 ls 从 SFTP 服务器获取文件的时间戳
【发布时间】:2014-03-14 00:05:42
【问题描述】:

我目前正在编写一个 Powershell 脚本,该脚本检索 SFTP 服务器上目录中所有文件的时间戳并将其写入文件。我正在使用 cygwin 附带的 sftp 实用程序连接到服务器。

我遇到的问题是ls 命令没有在时间戳中显示年份。这是一个输出示例:

sftp> ls -lt
-rw-r--r--   1 9665     9665          358 Mar 13 10:05 file.txt
-rw-r--r--   1 9665     9665          217 Mar 13 10:00 file2.txt

我似乎无法访问任何强制ls 显示常规ls 命令年份的标志。这些是我可以通过以下方式获得的选项:

ls [-1aflnrSt] [path]              Display remote directory listing

我也尝试过使用psftp,它给出的格式相同,但没有年份。

我的问题是如何确保年份显示在日期中?这将是理想的解决方案。但是,如果无法显示,是否可以简单地假设该文件来自当年,并且前几年的任何文件都会专门指定年份?这是ls 在 sftp 上的默认行为吗?

【问题讨论】:

  • 不确定您使用什么“常规ls 命令”,但Unix 上通常的ls 命令仅在文件超过一年时才显示年份...与@ 没有区别987654335@ 行为。
  • 根据 gnu.org/software/coreutils/manual/html_node/… ,如果日期在未来或超过 6 个月,时间戳仅包括年份。我猜你需要根据格式以不同的方式处理行。
  • 另一种选择是使用 WinSCP,它具有用于 PowerShell 的 .NET 库。 RemoteFileInfo 类具有 LastWriteTime 属性。
  • 根据您需要支持的 PowerShell 版本,我认为您还可以使用 System.Net.FtpWebRequest 类,将 Method 属性设置为 ListDirectoryListDirectoryDetails 值[msdn.microsoft.com/en-us/library/… 输入,列出您的 FTP 目录。
  • 谢谢,我结束了使用 WinSCP,因为它总是显示文件的时间,而 sftp 将停止显示上一年文件的时间。

标签: linux windows powershell cygwin


【解决方案1】:

方法: 一、你可以解析字符串中的日期并尝试连续查找4个数字。还添加检查 containsig "19","20" 或 $targetYear 优先。

二。您也可以使用“ls -l --full-time”命令显示年份。

三。最后,在我使用的远程 Linux 服务器中处理文件的练习中:

  1. 将远程目录挂载为磁盘“New-PSDrive -name $diskLiteral -psprovider FileSystem -Root $outsightFolder -Credential $cred”
  2. 获取目录“Get-ChildItem ($diskLiteral + $subfolder) -Force | Where-Object $_.CreationTime -ge $targetDate”中的文件排序列表
  3. 卸载目录“Remove-PSDrive -Name $diskLiteral -Force -PSProvider FileSystem”。

    第二步,您可以根据需要添加任何排序,选择有关文件和格式表的任何信息(如果它是数据表示的必要表格形式)。

【讨论】:

    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多