Intereting Posts
Существует ли другое расположение файлов для файлов конфигурации grub2 в системе UEFI? Содержит ли жесткие ссылки обычные файлы? Найти все символические ссылки в каталоге и изменить цель на другой каталог Как рассказать браузеру Chromium для запуска URL-адреса как одного экземпляра, а не нескольких экземпляров? `(kill-line 0)` убивает физическую линию даже в режиме глобальной визуальной линии в Emacs Сбросить средние нагрузки? Как войти в руководство пользователя vim, не находясь в VIM Баш не может действовать как никто и негруппа? sed – печатать строки, соответствующие диапазону шаблонов, если одна строка соответствует условию Что касается удаления первых 327 строк во всех файлах .dat в папке Что заставляет Mutt терпеть неудачу на этом пути Как создать загрузочную флешку для «efi-shell» Нет звука с новейшей версией ядра – это ошибка ядра или что-то еще? Как определяется конфигурация ядра Linux? dpkg бинарные файлы сломаны?

Команда Shell для сохранения списка фильмов в csv

Я пытаюсь написать команду командной строки (bash), чтобы сохранить список фильмов в CSV-файл. Я в порядке с использованием сценария, если это необходимо.

Мои папки выложены следующим образом:

-Movies/ --A/ ----After Earth (2013).mkv --B/ ----Batman (1989).mkv 

Используя эту команду:

  ls Movies/* | grep '.mkv' | cut -d. -f1 

Это дает мне список фильмов, которые, как я знаю, относятся к типу MKV.

  12 Monkeys (1995) 2001 - A Space Odyssey (1968) A Million Ways To Die In The West (2014) A Series of Unfortionate Events (2004) Bad Company (2002) 

В конечном итоге я хотел бы получить файл CSV, который выглядит следующим образом:

  MOVIE_NAME, MOVIE_YEAR, FILE_TYPE, CREATED_DATE (YYYY-MM-DD) 

Возможно, может потребоваться что-то, связанное с sed или awk?

Этот скрипт предполагает, что все файлы находятся в формате в вопросе.

 #!/bin/sh # # Important! This assumes all files are in the following format: # # Movies/A/After Earth (2013).mkv # Movies/B/Batman (1989).mkv # Movies/C/Carry On Sergeant (1958).mkv" raw=`find ./Movies -type f -name \*.mkv` # Field split on line return IFS=" " for m in $raw do fDate=`stat -f %Sm -t %Y-%m-%d "$m"` fName=${m##*/} fExt=${m##*\.} # Assume every movie is in "Name of Film (YYYY).mkv" format movie=${fName%% (*} mYear=${fName%%)*} mYear=${mYear##*(} echo "\"${movie}\", \"${mYear}\", \"${fExt}\", \"${fDate}\"" done exit 

И результат должен выглядеть следующим образом:

 "After Earth", "2013", "mkv", "2017-05-14" "Batman", "1989", "mkv", "2017-05-14" "Carry On Sergeant", "1958", "mkv", "2017-05-14" 

Предполагая по дате создания , вы имеете в виду последнее время модификации файла (как сообщается ls -l ), затем с помощью GNU find вы можете сделать (здесь, используя формат RFC 4180 CSV):

 find . -regextype posix-extended \ -regex '.*\([0-9]{4}\)\.[[:alnum:]]+' \ -type f \ -printf '%TF/%f\0' | perl -l -0pe ' s/"/""/g; s{(.*)/(.*?)\s*\((\d{4})\)\.([^.]*)$}{"$2",$3,$4,$1\r}s'