为文件添加时间戳

为文件添加时间戳

终端输出我正在使用 Lubuntu 20.04 LTS。我想为一些 wav 文件添加时间戳,以便将它们上传到网站。我希望第一个文件是 Garden2021-05-02_04-10-00.wav,后面的文件每个文件增加 30 秒。请问我该怎么做最好?

答案1

首先将日期更改为可以轻松增加 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

答案2

虽然它通常与 形式的替换一起使用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)对纯文本文件进行排序n以数值方式n同增加:

% 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)"

相关内容