Добавить отметку времени к файлам

Terminal output Я использую Lubuntu 20.04 LTS. Я хотел бы добавить метку времени к некоторым файлам wav, чтобы их можно было загрузить на веб-сайт. Я хочу, чтобы первый файл был Garden2021-05-02_04-10-00.wav, а количество следующих файлов увеличивалось на 30 секунд для каждого файла. Как мне лучше сделать это, пожалуйста?

0
задан 21 May 2021 в 11:37

2 ответа

Хотя она обычно используется с заменами вида s / pattern / replacement / , команда rename на основе Perl фактически может принимать любые допустимые выражения 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 , когда вас устраивают предлагаемые переименования.

Обратите внимание, что файлы будут отмечены в том порядке, в котором * раскрывается в вашем языковом стандарте. Если вам нужен другой порядок, то, IMHO, самый простой способ - переключиться на Z-оболочку ( 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 , то вы можете сделать то же самое в других оболочках, используя внешнюю 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)"
0
ответ дан 28 July 2021 в 11:38

Начните с изменения даты в формате, который можно легко увеличить на 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
ответ дан 28 July 2021 в 11:38

Другие вопросы по тегам:

Похожие вопросы: