有一堆照片,有的是JPG,有的是jpg。按照不同日期分别存放于不同的文件夹里。
任务:提取图片元数据,每个文件夹里面的照片元数据都保存在这个文件夹中一个文件名为Exif.txt的文件里。
做过的尝试:
filelist=`ls *.JPG`
for name in $filelist;
do
echo 正在分析:$name;
identify -verbose $name >> Exif.txt
上面的脚本可以按照要求完成,但缺点一是一次只能处理一个文件夹中的照片数据,二是JPG与jpg不能一起处理。
还试了一个:
find ~/XXX -iname '*.JPG' -exec identify -verbose >> Exif.txt {} {} \;
上面的脚本可以一次处理所有照片,JPG和jpg都能一同处理,缺点是生成的所有照片的exif信息全部放在一个文件里面,并不能分别在每个文件夹里保存Exif文档。
请教高手,如何结合这两条脚本的优点:
一次处理所有照片,JPG和jpg都能一同处理,将照片的exif信息按照原有的文件夹结构,每个文件夹就生成关于这个文件夹里照片的Exif数据文件。
先谢谢~~~
求助一个关于批处理的问题。。。
- chinaz
- 帖子: 238
- 注册时间: 2007-02-07 9:23
求助一个关于批处理的问题。。。
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。
- b33e
- 帖子: 3874
- 注册时间: 2011-06-07 14:20
Re: 求助一个关于批处理的问题。。。
-
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
Re: 求助一个关于批处理的问题。。。
代码: 全选
/tmp$ a='/home/aaa/a.jpg'
/tmp$ echo ${a%/*}
/home/aaa
然后
dentify -verbose $name >> ${name%/*}/Exif.txt
- chinaz
- 帖子: 238
- 注册时间: 2007-02-07 9:23
- sunfish
- 帖子: 989
- 注册时间: 2008-05-03 1:53
Re: 求助一个关于批处理的问题。。。
代码: 全选
filelist="$(find /xxx/ -name '*.[jJ][pP][gG]')"
for i in $filelist
do
echo 正在分析:$i
identify -verbose $i >> $(dirname $i)/Exif.txt
done
docker && kubernetes
- chinaz
- 帖子: 238
- 注册时间: 2007-02-07 9:23
Re: 求助一个关于批处理的问题。。。
2楼兄弟的方案还是只能处理当前文件夹下的任务,5楼的朋友给出的方案比较完美的解决了本人的需求。但是在测试中发现如果文件和文件夹的名字中带有空格,就会出错。。。
再次感谢各位的帮助!
再次感谢各位的帮助!
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。
- kashu
- 帖子: 451
- 注册时间: 2014-02-07 17:31
- 系统: Xubuntu 14.04.5 64位
Re: 求助一个关于批处理的问题。。。
可参考一下我以前写的这个脚本(关键函数compress里),可递归切换到各个目录中依次执行相应的动作,支持特殊文件名(特殊字符)chinaz 写了:2楼兄弟的方案还是只能处理当前文件夹下的任务,5楼的朋友给出的方案比较完美的解决了本人的需求。但是在测试中发现如果文件和文件夹的名字中带有空格,就会出错。。。
再次感谢各位的帮助!
代码: 全选
#!/bin/bash
#Author: kashu
#Date: 2016-01-30
#Filename: tinypng.sh
#Description: Advanced lossy compression for PNG/JPG images.
# Check if the curl command is executable
if [ ! -x "`which curl | head -1`" ]; then
echo "Could not execute /usr/bin/curl"
exit 1
fi
backup="/tmp/img_original_`date +%Y%m%d_%H%M%S`"
mkdir $backup &> /dev/null
if [ ! -d "$backup" ]; then
exit
fi
compress(){
find "$img_path" -maxdepth $max \( -iname "*.png" -o -iname "*.jpg" \) 2> /dev/null | while read file; do
pic_url=$(curl -sif --user api:API_KEY --data-binary @"${file}" https://api.com/shrink|awk -F'"' '/input/{print $(NF-1)}')
if [ -z "$pic_url" ]; then
continue
fi
suffix=${file##*.}
suffix_lower=${pic_url##*.}
mv --backup=t "${file}" $backup
wget --no-check-certificate "$pic_url" -O "${file%.*}.${suffix_lower}"
done
}
dir_err(){
echo -e "$1"" is not a valid directory.\n"
}
help_info(){
cat <<- END
Options:
-r|-R Recursively compress images
-h|--help Print help info
Usage:
$0 [-r|-R] [/path/to/img]
END
exit
}
case "$1" in
-h|--help)
help_info ;;
-r|-R)
shift 1
if [ -d "$1" ]; then
img_path="$1"
max=40
compress
elif [ -z "$1" ]; then
img_path="$PWD"
max=40
compress
else
dir_err; help_info
fi ;;
*)
if [ -d "$1" ]; then
img_path="$1"
max=1
compress
elif [ -z "$1" ]; then
img_path="$PWD"
max=1
compress
else
dir_err; help_info
fi ;;
esac
OS: Xubuntu 14.04.5 LTS 64-bit
CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
RAM: 12GB DDR3 1333MHz
128GB SSD + 2TB HDD
神舟优雅A480B-I5B 购于 2012.08
YouTube频道:https://www.youtube.com/channel/UCGSPXZ ... DuDYX8L6Qg
-
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
Re: 求助一个关于批处理的问题。。。
但是在测试中发现如果文件和文件夹的名字中带有空格,就会出错
代码: 全选
find /your_path -iname '*.jpg' |xargs -i bash -c 'f="{}"; identify -verbose "$f" >> "${f%/*}"/Exif.txt'