【发布时间】:2018-12-28 20:10:59
【问题描述】:
我正在寻找一种通过给文件添加时间戳来更改文件名的方法。事情是这样发生的:
2018-07-20_15:30:27_m_group_types.csv
这就是我希望的样子:
m_group_types.csv
我真的不明白怎么...
【问题讨论】:
我正在寻找一种通过给文件添加时间戳来更改文件名的方法。事情是这样发生的:
2018-07-20_15:30:27_m_group_types.csv
这就是我希望的样子:
m_group_types.csv
我真的不明白怎么...
【问题讨论】:
使用 shell 替换,您可以执行以下操作:
$ filename="2018-07-20_15:30:27_m_group_types.csv"
$ mv "$filename" "${filename#*_*_}"
如果你有很多这种形式的文件,可以考虑使用ZSH,使用zmv命令:
$ zmv -n '[^_]##_[^_]##_(*csv)' '$1'
删除-n 以实际执行此操作,(-n 是空运行)
【讨论】:
你可以试试cut
echo "2018-07-20_15:30:27_m_group_types.csv" | cut -d "_" -f3-
输出:
m_group_types.csv
说明:
-d:对于分隔符,在这种情况下我们选择"_"。
-f:选择字段进行切割,在这种情况下,分隔符"_" 拆分字符串2018-07-20_15:30:27_m_group_types.csv到5字段:
字段 1:2018-07-20
字段 2:15:30:27
字段 3:m
字段 4:group
字段 5:types.csv
因此,使用-f3-,我们选择从Field 3 中删除,甚至更远。
【讨论】:
请您尝试关注一下。
echo "2018-07-20_15:30:27_m_group_types.csv" | sed -E 's/.*[0-9]+:[0-9]+:[0-9]+_//'
与awk:
echo "2018-07-20_15:30:27_m_group_types.csv" | awk 'match($0,/.*[0-9]+:[0-9]+:[0-9]+_/){print substr($0,RSTART+RLENGTH)}'
【讨论】:
你也可以试试
mv $(date +%Y-%m-%d_%H:%M:%S_)m_group_types.csv m_group_types.csv
或
mv $(date +%Y-%m-%d_%H:%M:%S_ -d "DATE_HERE_IF_NOT_TODAY")m_group_types.csv m_group_types.csv
【讨论】:
mv 命令一样,这里没有单一的加速形式。第一个命令需要在文件名包含的时间准确执行,第二个命令你实际上需要变量“DATE_HERE_IF_NOT_TODAY”中的时间,那么你可以完全跳过date命令。