прочитати дату створення з імені файлу та змінити - пакет


1

У мене є файли, які називаються "clip-2014-01-31 18; 50; 15.mp4", тобто "clip-YYYY-MM-DD hh; mm; ss.mp4".

Як я можу встановити дату і час створення відповідно до того, як це вказано в імені файлу для всіх 2000 файлів у папці. Я знаю команду touch -t змінює дату створення, але я не знаю, як витягнути інформацію про дату / час з імені файлу і помістити його в команду, щоб це було зроблено автоматично для всіх файлів.

Відповіді:


3

Вам пощастило, тому що номери в іменах файлів містяться лише в порядку touch -t потреб.

Ця команда в терміналі буде працювати. Просто переконайтеся, що ваш робочий каталог встановлено у теці, яку ви бажаєте виконати:

for f in *; do
    t=$(echo $f | sed -E 's/([A-z]*-)|([ ,;])|(\..*)//g' | sed -E 's/(.*)(..)/\1.\2/')
    touch -t $t "$f"
done

Щоб розбити його:

for f in * встановлює змінну f до імені кожного файлу в каталозі, в свою чергу.

do ставить все до тих пір done в for петлі.

t=$(…) встановлює змінну t до виводу команд у дужках.

Перший sed команда відповідає будь-яким літерам перед a - символ, - ; і space і розширення файлу, а також видаляє їх.

Другий sed Команда вставляє період між значеннями mm і ss, як потрібно дотику.

touch -t $t $f змінює час модифікації та створення файлів на значення t у файлі f.

Протестовано на деяких фіктивних файлах з будь-якою версією sed судна з Mavericks.


@mcanwo Будь ласка, позначте цю відповідь як прийняту. Це допомагає винагородити респондента і також відзначає це питання як робоче рішення: meta.stackexchange.com/questions/5234/…
Graham Miln
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.