Marty Asked: 2021-05-21 04:43:12 +0800 CST2021-05-21 04:43:12 +0800 CST 2021-05-21 04:43:12 +0800 CST 为文件添加时间戳 772 我正在使用 Lubuntu 20.04 LTS。我想为一些 wav 文件添加时间戳,以便将它们上传到网站。我希望第一个文件是 Garden2021-05-02_04-10-00.wav 和以下文件,每个文件增加 30 秒。请问我怎样才能最好地做到这一点? timestamp 2 个回答 Voted pLumo 2021-05-21T05:07:10+08:002021-05-21T05:07:10+08:00 首先将日期更改为可以轻松增加 30 秒的格式,例如 Unix 时间戳: timestamp=$(date -d 2021-05-02T04:10:00 +%s) # --> 1619921400 然后你可以像这样增加时间戳: timestamp=$((timestamp+30)) 要获取您喜欢的文件名,请使用date: date -d @$timestamp "+Garden%F_%H-%M-%S.wav" 现在循环您的文件并组合命令: timestamp=$(date -d 2021-05-02T04:10:00 +%s) for f in *.wav; do echo mv "$f" "$(date -d @$timestamp "+Garden%F_%H-%M-%S.wav")" timestamp=$((timestamp+30)) done 对输出感到满意后,删除echo. Best Answer steeldriver 2021-05-21T07:54:40+08:002021-05-21T07:54:40+08:00 尽管它通常与 形式的替换一起使用s/pattern/replacement/,但基于 perl 的rename命令实际上可以接受任何有效的 perl 表达式。因此,例如(从pLumo 的答案中借用初始化)你可以这样做: rename -n -- ' BEGIN{use Time::Piece; our $ts = Time::Piece->new(shift)} $_ = our $ts->strftime("Garden%F_%H-%M-%S.wav"); $ts += 30 ' "$(date -d 2021-05-02T04:10:00 +%s)" *.wav -n一旦您对建议的重命名感到满意,请删除。 请注意,文件将按照*您所在地区的扩展顺序进行标记。如果您想要另一个顺序,那么恕我直言,最简单的方法是切换到 Z-shell ( zsh),您可以在其中使用glob 限定符来指定排序顺序。例如*.wav(n),或按名称递增对*.wav(.non)普通文件进行数字排序: % ls *.wav 1.wav 10.wav 11.wav 12.wav 2.wav 3.wav 4.wav 5.wav 6.wav 7.wav 8.wav 9.wav % rename -n -- ' BEGIN{use Time::Piece; our $ts = Time::Piece->new(shift)} $_ = our $ts->strftime("Garden%F_%H-%M-%S.wav"); $ts += 30 ' "$(date -d 2021-05-02T04:10:00 +%s)" *.wav(.non) rename(1.wav, Garden2021-05-02_04-10-00.wav) rename(2.wav, Garden2021-05-02_04-10-30.wav) rename(3.wav, Garden2021-05-02_04-11-00.wav) rename(4.wav, Garden2021-05-02_04-11-30.wav) rename(5.wav, Garden2021-05-02_04-12-00.wav) rename(6.wav, Garden2021-05-02_04-12-30.wav) rename(7.wav, Garden2021-05-02_04-13-00.wav) rename(8.wav, Garden2021-05-02_04-13-30.wav) rename(9.wav, Garden2021-05-02_04-14-00.wav) rename(10.wav, Garden2021-05-02_04-14-30.wav) rename(11.wav, Garden2021-05-02_04-15-00.wav) rename(12.wav, Garden2021-05-02_04-15-30.wav) 如果您不能使用zsh,那么您可以在其他 shell 中使用外部sort与 一起执行相同的操作xargs: printf '%s\0' *.wav | sort -zn | xargs -0 rename -n -- ' BEGIN{use Time::Piece; our $ts = Time::Piece->new(shift)} $_ = our $ts->strftime("Garden%F_%H-%M-%S.wav"); $ts += 30 ' "$(date -d 2021-05-02T04:10:00 +%s)"
首先将日期更改为可以轻松增加 30 秒的格式,例如 Unix 时间戳:
然后你可以像这样增加时间戳:
要获取您喜欢的文件名,请使用
date
:现在循环您的文件并组合命令:
对输出感到满意后,删除
echo
.尽管它通常与 形式的替换一起使用
s/pattern/replacement/
,但基于 perl 的rename
命令实际上可以接受任何有效的 perl 表达式。因此,例如(从pLumo 的答案中借用初始化)你可以这样做:-n
一旦您对建议的重命名感到满意,请删除。请注意,文件将按照
*
您所在地区的扩展顺序进行标记。如果您想要另一个顺序,那么恕我直言,最简单的方法是切换到 Z-shell (zsh
),您可以在其中使用glob 限定符来指定排序顺序。例如*.wav(n)
,或按名称递增对*.wav(.non)
普通文件进行数字排序:如果您不能使用
zsh
,那么您可以在其他 shell 中使用外部sort
与 一起执行相同的操作xargs
: