映画のリストをCSVファイルに保存するために1行のシェルコマンド(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'