You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Unix环境下SFTP模式中给文件名追加时间戳重命名是否可行?

当然可以实现这个需求!不过SFTP本身的命令集里并没有直接支持动态生成时间戳的功能,得结合一些小技巧来完成,我分两种常见场景给你说明:

1. 交互式SFTP会话(手动操作)

如果你是在终端里手动连接SFTP服务器操作,步骤很简单:

  • 先在本地shell窗口(注意不是SFTP会话内部)生成需要的时间戳,用date命令就能搞定:
    # 生成格式为YYYY-MM-DD-HHMMSS的时间戳
    timestamp=$(date +"%Y-%m-%d-%H%M%S")
    
    执行后会输出类似2018-04-02-040404的字符串,把这个值记下来。
  • 切换回SFTP会话,执行rename命令,把时间戳替换进去:
    rename fileA.csv fileA-2018-04-02-040404.csv
    

2. 脚本自动化(批量/定时操作)

如果要自动完成这个重命名操作,比如定时任务或者批量处理,用shell脚本结合SFTP的批处理模式就很方便:

方法一:通过Here Document直接传递命令

这是最简洁的方式,不需要临时文件:

#!/bin/bash
# 生成时间戳
timestamp=$(date +"%Y-%m-%d-%H%M%S")
# 连接SFTP并执行重命名
sftp your_username@your_server_ip << EOF
rename fileA.csv fileA-${timestamp}.csv
quit
EOF

方法二:使用SFTP命令批处理文件

如果需要执行多个SFTP命令,也可以先把命令写入临时文件再执行:

#!/bin/bash
timestamp=$(date +"%Y-%m-%d-%H%M%S")
# 生成SFTP命令文件
cat > sftp_cmds.txt << EOF
rename fileA.csv fileA-${timestamp}.csv
# 这里可以加其他SFTP命令,比如ls、get等
quit
EOF
# 执行SFTP操作
sftp your_username@your_server_ip < sftp_cmds.txt
# 清理临时文件
rm sftp_cmds.txt

几个需要注意的点

  • 确保你对目标文件拥有写权限,否则rename命令会返回权限错误。
  • 时间戳的格式可以通过date命令的参数自由调整,比如想改成无分隔符的20180402040404,就用date +"%Y%m%d%H%M%S"
  • 如果文件名包含空格或特殊字符,记得用双引号包裹文件名,比如rename "file A.csv" "file A-${timestamp}.csv"

内容的提问来源于stack exchange,提问作者Eric

火山引擎 最新活动