Bash l oop для получения первых 12 символов в имени файла, используя вывод для запуска команды touch -t для каждого файла - PullRequest
1 голос
/ 12 апреля 2020

У меня есть серия файлов в следующем формате:

ГГГГММДДЧЧммXXXXXX.m4a в каталоге

Я хотел бы написать скрипт, который позволит мне хранить каждое имя файла как переменную, назовем ее MyFile, затем сохраняем «YYYMMDDHHmm» (первые 12 символов каждого файла) как переменную, назовем ее TimeStamp и используем ее для обновления данных «Дата создания» для каждого файла в l oop. Команда должна выглядеть примерно так:

touch -t TimeStamp Myfile.m4a

Я новичок в написании скриптов и написал следующее, которое возвращает неожиданный конец в строке 17

#!/usr/bin/env bash

for f in /Users/username/music/M4Atest/*.m4a;

do filename=${f%%.*};

echo ${filename};

for ${filename};

do timestamp="${filename:0:12}";

echo ${timestamp};

done;

Спасибо за любую помощь

1 Ответ

1 голос
/ 12 апреля 2020

Достаточно одного l oop и используйте ${f##*/}, чтобы удалить самый длинный шаблон префикса */, чтобы получить имя файла.

#!/bin/bash

shopt -s nullglob  # expands a glob pattern to a null string if the pattern doesn't match
for f in /Users/username/music/M4Atest/*.m4a; do
  filename=${f##*/}
  touch -t "${filename:0:12}" "$f"
done

Если вы хотите более безопасный шаблон имени файла, вы можете использовать [0-9][0-9][0-9][0-9][01][0-9][0-3][0-9][0-2][0-9][0-5][0-9]?*.m4a вместо *.m4a. Это позволит убедиться, что ваше имя файла содержит хотя бы метку времени плюс один символ (?) плюс любое количество символов (*), за которым следует суффикс .m4a.

# explanation:
# [0-9][0-9][0-9][0-9][01][0-9][0-3][0-9][0-2][0-9][0-5][0-9]?*.m4a
#    Y    Y    Y    Y   M    M    D    D    H    H    m    m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...