当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 求助一个关于批处理的问题。。。
帖子发表于 : 2016-12-23 22:13 
头像

注册: 2007-02-07 9:23
帖子: 192
送出感谢: 0 次
接收感谢: 0 次
有一堆照片,有的是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数据文件。
先谢谢~~~


_________________
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 求助一个关于批处理的问题。。。
帖子发表于 : 2016-12-23 23:27 
头像

注册: 2011-06-07 14:20
帖子: 3866
系统: Mint18
送出感谢: 17
接收感谢: 65
你的方法1稍微改一下就行啊
不区分大小写:
代码:
filelist=`ls | grep -i '^.*jpg$'`

只能处理一个文件夹应该也不是什么问题,循环就行了
或者递归当前目录下包括子目录所有的.jpg或.JPG结尾的文件,结果为绝对路径
代码:
filelist=`ls -R| sed "s:^:\`pwd\`/:" | grep -i '^.*jpg$'`


_________________
wiki: ubuntu 技巧


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 求助一个关于批处理的问题。。。
帖子发表于 : 2016-12-24 10:07 

注册: 2007-12-05 10:57
帖子: 1003
地址: 金山
系统: ubuntu14.04
送出感谢: 13
接收感谢: 62
代码:
/tmp$ a='/home/aaa/a.jpg'
/tmp$ echo ${a%/*}
/home/aaa


所以先得到带路径的文件名,用name变量取到这个值
然后
dentify -verbose $name >> ${name%/*}/Exif.txt


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 求助一个关于批处理的问题。。。
帖子发表于 : 2016-12-25 11:23 
头像

注册: 2007-02-07 9:23
帖子: 192
送出感谢: 0 次
接收感谢: 0 次
:em11 谢谢二位帮忙!晚上回去试试~


_________________
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 求助一个关于批处理的问题。。。
帖子发表于 : 2016-12-25 15:08 
头像

注册: 2008-05-03 1:53
帖子: 959
送出感谢: 19
接收感谢: 11
代码:
filelist="$(find /xxx/ -name '*.[jJ][pP][gG]')"
for i in $filelist
do
    echo 正在分析:$i
    identify -verbose $i >> $(dirname $i)/Exif.txt
done


_________________
有空就看看docker吧,发展好快


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 求助一个关于批处理的问题。。。
帖子发表于 : 2017-01-01 21:14 
头像

注册: 2007-02-07 9:23
帖子: 192
送出感谢: 0 次
接收感谢: 0 次
2楼兄弟的方案还是只能处理当前文件夹下的任务,5楼的朋友给出的方案比较完美的解决了本人的需求。但是在测试中发现如果文件和文件夹的名字中带有空格,就会出错。。。
再次感谢各位的帮助!


_________________
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 求助一个关于批处理的问题。。。
帖子发表于 : 2017-01-01 21:27 
头像

注册: 2014-02-07 17:31
帖子: 453
系统: Xubuntu 14.04.5 64位
送出感谢: 40
接收感谢: 33
chinaz 写道:
2楼兄弟的方案还是只能处理当前文件夹下的任务,5楼的朋友给出的方案比较完美的解决了本人的需求。但是在测试中发现如果文件和文件夹的名字中带有空格,就会出错。。。
再次感谢各位的帮助!


可参考一下我以前写的这个脚本(关键函数compress里),可递归切换到各个目录中依次执行相应的动作,支持特殊文件名(特殊字符)
代码:
#!/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/UCGSPXZ7DbSc8QDuDYX8L6Qg


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 求助一个关于批处理的问题。。。
帖子发表于 : 2017-01-01 22:30 

注册: 2007-12-05 10:57
帖子: 1003
地址: 金山
系统: ubuntu14.04
送出感谢: 13
接收感谢: 62
引用:
但是在测试中发现如果文件和文件夹的名字中带有空格,就会出错


代码:
find /your_path -iname '*.jpg' |xargs -i bash -c 'f="{}"; identify -verbose "$f"  >> "${f%/*}"/Exif.txt'


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译