Skip to content

Instantly share code, notes, and snippets.

@on0z
Last active October 17, 2023 17:11
Show Gist options
  • Save on0z/8ef511d808d1a1b790d89a9010250062 to your computer and use it in GitHub Desktop.
Save on0z/8ef511d808d1a1b790d89a9010250062 to your computer and use it in GitHub Desktop.
importFromSonyAlpha ソニー製カメラαから,写真と動画を整理して取り出すスクリプト
#!/bin/bash
function find_folder_start_with () {
# 検索対象のフォルダのPrefix
START_WITH=$1
# 検索対象のフォルダが持つファイル (Optional)
SPECIFIC_FILE_NAME=$2
# SPECIFIC_FILEがいずれかのフォルダに存在するか確認
RES=$(find ./$1* -name "$2" 2>/dev/null)
if [ $? -ne 0 ]; then
# 予期せぬエラーの場合
:
elif [ -z "$RES" ]; then
# 存在しない場合
:
else
# 存在する場合
echo "$(echo "${RES%/*}" | head -n 1)"
return
fi
# START_WITHから始まるフォルダを探索
RES=`find . -maxdepth 1 -type d -name "$1*" 2>/dev/null`
if [ $? -ne 0 ]; then
# 予期せぬエラーの場合
echo "$1"
elif [ -z "$RES" ]; then
# 存在しない場合
echo "$1"
else
# 存在する場合
echo "$(echo "$RES" | tail -n 1)"
fi
}
SCRIPT_DIR=$(cd $(dirname "$0") && pwd)
cd "${SCRIPT_DIR}"
FROM="/Volumes/Untitled"
FROM=${FROM%/}
if [ ! -d ${FROM} ]; then
echo SDカードないで
exit 1
fi
echo 出力先: ${SCRIPT_DIR}
# 写真
echo 写真をMacに取り込む
FROM_IMG="${FROM}/DCIM"
# SDカードの空フォルダを削除
find "${FROM_IMG}" -type d -empty -exec rmdir {} \; -prune
# フォルダー名(DIRNAME)が、フォルダー番号(3桁)+年月日(西暦下1桁月日4桁)になる。例:10010405(100フォルダー、2021年4月5日)
for DIRNAME in $(ls "${FROM_IMG}");
do
if [[ ! ${DIRNAME} =~ [0-9]{8} ]]; then continue; fi
dirpath="${FROM_IMG}/${DIRNAME}"
IMG_DATE=${DIRNAME:3} # 00405
YEAR=$(date "+%Y")
# 写真の日時がxxx9年で、今年がxxx9年ではない場合、多くの場合去年の写真であると推測されるので、YEARから10を引く
if [ ${IMG_DATE:0:1} = "9" ] && [ ! ${YEAR:3:1} = "9" ]; then YEAR=$((${YEAR} - 10)); fi
FOLDER_PREFIX="${YEAR:0:3}${IMG_DATE} ${DIRNAME:0:3}"
echo ${DIRNAME}フォルダの写真を取り込む
for FILENAME in $(ls "${dirpath}");
do
DIST_FOLDER_NAME=$(find_folder_start_with "${FOLDER_PREFIX}" "${FILENAME}")
mkdir -p "${DIST_FOLDER_NAME}"
# 実行内容表示 パーミッションと所有者とタイムスタンプを保持 上書きしない
cp -vpn "${dirpath}/${FILENAME}" "${DIST_FOLDER_NAME}"
done
done
# 動画
# ファイル名が、日付+タイトル+ファイル番号になる。
echo 動画を取り込む
FROM_MOV="${FROM}/private/M4ROOT/CLIP"
for filepath in $(ls ${FROM_MOV}/*.MP4);
do
FILENAME=${filepath##*/}
MOV_DATE=${FILENAME%%_*}
MOV_TITLE=${FILENAME##*_}
DIST_FOLDER_NAME=$(find_folder_start_with "${MOV_DATE}" "${MOV_TITLE}")
mkdir -p "${DIST_FOLDER_NAME}"
cp -vpn "${filepath}" "${DIST_FOLDER_NAME}/${MOV_TITLE}"
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment