영화 목록을 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'