영화 목록을 csv에 저장하는 쉘 명령

영화 목록을 csv에 저장하는 쉘 명령

영화 목록을 CSV 파일에 저장하기 위해 한 줄짜리 셸 명령(bash)을 작성하려고 합니다. 필요한 경우 스크립트를 사용할 수 있습니다.

내 폴더 레이아웃은 다음과 같습니다.

    -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와 관련된 것이 필요할 수도 있습니다.

답변1

스크립트는 모든 파일이 질문의 형식이라고 가정합니다.

#!/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"

답변2

다음과 같이 가정하면생산 일, 파일의 마지막 수정 시간( 에서 보고한 대로 ls -l)을 의미하고 GNU를 사용하여 find이를 수행할 수 있습니다(여기서는 다음을 사용하여).RFC 4180CSV 형식):

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'

관련 정보