그래서 기본적으로 저는 오래된 사진이 잔뜩 들어 있는 외장 하드 드라이브를 가지고 있고 제 목표는 그 사진들을 모두 Google 포토에 저장하는 것입니다. 문제는 사진이 Mac 사진 소프트웨어를 사용하여 관리되고 연도와 날짜를 기준으로 여러 폴더로 분류되기 때문에(대략 4000개의 서로 다른 폴더라고 생각함) 사진을 수동으로 찾아보고 업로드할 수 있지만 시간이 좀 걸린다는 것입니다. 그래서 이미지 확장명(예: .jpg, .bmp 등)이 있는 모든 파일을 가져와서 폴더로 이동할 수 있는 방법을 찾고 있습니다. 저는 Ubuntu를 사용하고 있으며 이를 달성하기 위해 스크립트를 작성하는 것을 두려워하지 않습니다. 감사합니다!
답변1
function imageext ()
{
if ! ((${#imageextensionlist[@]})); then
declare -ga imageextensionlist=($(grep / /etc/mime.types|grep 'image/'|xargs printf '%s\n'|grep -v /));
fi;
[[ " ${imageextensionlist[@]} " == *" ${1,,} "* ]]
}
function videoext ()
{
if ! ((${#videoextensionlist[@]})); then
declare -ga videoextensionlist=($(grep / /etc/mime.types|grep 'video/'|xargs printf '%s\n'|grep -v /));
fi;
[[ " ${videoextensionlist[@]} " == *" ${1,,} "* ]]
}
function imagesize () # you may need to install imagemagick
{
local re=$(identify -format %wx%h "${1}");
printf "${re%%x*}x${re##*x}"
}
cd /parrent/dir/where/your/pictures;
mkdir tmp;
mv * tmp/;
mkdir videos pictures other;
find "${PWD}/tmp" -type f | while read thefile;do
if imageext "${thefile##*.}";then
imgsize="$(imagesize "${thefile}")";
[[ ! -d "${imgsize:-none}" ]] && mkdir -p "${imgsize:-none}"
mv "${thefile}" pictures/${imgsize:-none}/;
elif videoext "${thefile##*.}";then
mv "${thefile}" videos/;
else
mv "${thefile}" other/
fi
done
이렇게 하면 사진의 해상도에 따라 사진이 정리되고 동영상은 동영상에 저장되고 기타 무시된 파일은 기타/