如何在NiFi流中获取源文件创建日期并据此重命名文件?
获取文件创建日期/时间并用于重命名
根据不同操作系统和开发工具,获取文件创建时间的方法有所区别,以下是几种常见场景的实现方式:
Python 实现
通过os和datetime模块即可完成文件创建时间获取与重命名操作:
- 导入所需模块:
import os import datetime
- 获取并格式化创建时间(Windows与Linux/macOS的获取方式有差异):
file_path = "你的目标文件路径" # Windows系统用getctime create_timestamp = os.path.getctime(file_path) # Linux/macOS系统用st_birthtime # create_timestamp = os.stat(file_path).st_birthtime # 转换为"YYYY-MM-DD_HH-MM-SS"格式的字符串 formatted_time = datetime.datetime.fromtimestamp(create_timestamp).strftime("%Y-%m-%d_%H-%M-%S")
- 执行重命名:
file_dir, file_fullname = os.path.split(file_path) file_name, file_ext = os.path.splitext(file_fullname) new_fullname = f"{file_name}_{formatted_time}{file_ext}" new_file_path = os.path.join(file_dir, new_fullname) os.rename(file_path, new_file_path)
PowerShell 实现
直接通过文件对象的CreationTime属性获取创建时间,批量处理更高效:
# 替换为你的目标文件夹路径 Get-ChildItem -Path "目标文件夹路径" -File | ForEach-Object { $formatted_time = $_.CreationTime.ToString("yyyy-MM-dd_HH-mm-ss") $new_name = "{0}_{1}{2}" -f $_.BaseName, $formatted_time, $_.Extension Rename-Item -Path $_.FullName -NewName $new_name }
Windows CMD 实现
借助forfiles命令提取创建时间,结合延迟变量扩展完成重命名:
@echo off setlocal enabledelayedexpansion set "target_dir=你的目标文件夹路径" forfiles /p "%target_dir%" /m *.* /c "cmd /c set \"fname=@fname\" & set \"fext=@ext\" & set \"ftime=@fdate @ftime\" & set \"ftime=!ftime:/=-!\" & set \"ftime=!ftime::=-!\" & ren @path \"!fname!_!ftime!!fext!\"" endlocal
Linux/macOS Bash 实现
用stat命令获取创建时间,通过mv命令完成重命名:
# 替换为你的目标文件夹路径 for file in /目标文件夹路径/*; do if [ -f "$file" ]; then # macOS系统获取格式化时间 create_time=$(stat -f "%SB" -t "%Y-%m-%d_%H-%M-%S" "$file") # Linux(以Ubuntu为例) # create_time=$(stat -c "%w" "$file" | cut -d' ' -f1,2 | tr ' :' '-') dir=$(dirname "$file") name=$(basename "$file" | cut -d. -f1) ext=$(basename "$file" | cut -d. -f2-) mv "$file" "$dir/${name}_${create_time}.${ext}" fi done
内容的提问来源于stack exchange,提问作者vnm
相关产品推荐
相关产品推荐

