多数のファイルを更新日ごとに振り分けるシェルスクリプト

多くのファイルが作成される場合に、それを更新年月日ごとに整理したいことがあります。
そういう時に使えるシェルスクリプトです。

スクリプト


#!/bin/sh

for file in `find /home/mituo/temp/ts -name "*.ts"`; do
    fname="${file##*/}"
    ymd=`date +%Y%m%d -r $file`
    mkdir -p /home/mituo/temp/classify/$ymd
    mv $file /home/mituo/temp/classify/$ymd/$fname
    echo $fname
done

解説すると、

fname=”${file##*/}” : ファイル名のみ取得
ymd=`date +%Y%m%d -r $file` : ファイルの更新年月日
mkdir -p /home/mituo/temp/classify/$ymd : その日付でディレクトリ作成

ts merge も書き換え


#!/bin/sh

rm -r ./temp/*.*

for i in `ls -v ts/*/*.ts` ; do 
    echo file "'$i'"
done > list.txt

ffmpeg -f concat -i list.txt -c copy ./temp/`date +%Y%m%d`.ts

for file in ./temp/*.ts; do
    echo $file
    faname_ext="${file##*/}"
    fname="${faname_ext%.*}"
    ffmpeg -i $file -c:v copy -c:a copy ./mp4/$fname.mp4
done

このシェルスクリプトは再帰的にファイル検索していないので、各ファイルは直下にある必要があります。