2013-10-13 3 views
0

У меня есть сценарий, который я создал, чтобы помочь с преобразованием видео, а затем загрузить его на наш сайт. Наши видео имеют стандартный формат для имени файла, чтобы помочь с правильной настройкой (день, месяц, год, т. Е. 09OCT2013.m4v). Они поступают в каталоги из года в год (т.е. 2013/окт/09OCT2013/09OCT2013.m4v). Прямо сейчас, мой скрипт открывается, запрашивая ввод пользователя за год, а затем месяц, а затем фактическое имя файла для этой папки. То, что я хочу сделать, - это взять файл, который уже был создан, отбросить его в скрипт, затем отделить его от сценария и поместить в соответствующий файл (т. Е. Отбросить файл 12JUN2012.m4v в скрипт и сценарий автоматически помещает его в 2012/jun/12JUN2012 /). Есть ли какой-либо возможный способ сделать это в терминале? Пожалуйста, дайте мне знать, если какая-либо часть моего вопроса неясна.Сплит имя файла до определения переменных

ответ

0

Предполагая, что вы используете bash:

for file in "[email protected]" 
do 
    dd=${file:0:2} 
    mm=${file:2:3} 
    yy=${file:5:4} 
    mv "$file" "$yy/$mm/$file" 
done 

Если файл должен быть перемещен дальше, или поставляются с большим количеством путевого именем, вы можете настроить скрипт, но основная идея разделения последнего компонента имя файла с использованием нотации подстроки является хорошим.

+0

Это сработало отлично! Благодаря! Мне пришлось найти способ получить путь к файлу от самого файла, но как только я понял это, мне было хорошо. – calebsurface

+0

'basename' - это классический метод удаления пути (и, необязательно, суффикс), а' dirname' - классический метод для получения каталога из пути. В наши дни '$ {file ## * /}' работает примерно так же, как 'basename' (кроме удаления суффикса), а' $ {file%/*} 'делает как' dirname', за исключением случаев, когда нет имя каталога ('dirname' yields' .', но '$ {file%/*}' дает имя файла). –

Смежные вопросы