![从一堆文件夹中提取所有图片文件](https://linux22.com/image/175272/%E4%BB%8E%E4%B8%80%E5%A0%86%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E6%8F%90%E5%8F%96%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E6%96%87%E4%BB%B6.png)
所以基本上我有一个外部硬盘驱动器,上面有一堆旧照片,我的目标是将它们全部放到谷歌照片中。问题是,因为这些照片是用 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
这将按图片/中的分辨率组织图片,并将视频放入视频/中,将其他忽略的文件放入其他/中