AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1457467
Accepted
s.k
s.k
Asked: 2023-03-03 06:20:23 +0800 CST2023-03-03 06:20:23 +0800 CST 2023-03-03 06:20:23 +0800 CST

当使用 exiftool 提取图像 EXIF 遇到空文件时,Bash 脚本无错误地停止

  • 772

我有这个脚本,它使用 exiftool 12.57 处理 Ubuntu 22.04 上子文件夹中的图像:

#!/bin/bash

set -e

DIR=/path/to/photos

for f in $(find "${DIR}" -type f -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png");
do
  echo "processing ${f}..."
  exiftool "${f}" >> output.txt
  printf -- '#%.0s' {1..80} >> output.txt
  printf '\n' >> output.txt
done

但是当它到达一个空文件时,它只是停止而不向 stdout/stderr 抛出任何警告或错误:

$ tail output.txt 
################################################################################
ExifTool Version Number         : 12.57
File Name                       : 20222601_DSC00057.JPG
Directory                       : /path/to/photos/experiment 11
File Size                       : 0 bytes
File Modification Date/Time     : 2020:10:26 15:03:22+01:00
File Access Date/Time           : 2023:03:02 16:47:51+01:00
File Inode Change Date/Time     : 2023:03:02 15:07:08+01:00
File Permissions                : -rw-rw-r--
Error                           : File is empty

该文件确实是一个 0 字节文件:

$ ls -larth /path/to/photos/experiment\ 11/20222601_DSC00057.JPG
-rw-rw-r-- 1 1000 1000 0 Feb 12  2021 '/path/to/photos/experiment 11/20222601_DSC00057.JPG'

我怎样才能让脚本继续处理其他文件,因为还有很多包含照片的文件夹要处理?

版本信息

$ bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)

$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 22.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.2 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

$ uname -mor
5.19.0-32-generic x86_64 GNU/Linux

$ exiftool -ver
12.57
command-line
  • 2 2 个回答
  • 66 Views

2 个回答

  • Voted
  1. s.k
    2023-03-04T18:30:12+08:002023-03-04T18:30:12+08:00

    为了后代,也因为我发现它也很有趣,我将 steeldriver 的答案重建为社区 wiki:

    set -e导致 shell(脚本)在exiftool返回非零退出状态时退出(在传递空文件时它显然会这样做)。

    如果您出于其他原因需要运行脚本set -e,您可以:

    • set +e在命令之前exiftool,然后set -e在之后重置

    或者(我认为更惯用)

    改变:

    exiftool "${f}" >> output.txt
    

    到:

    exiftool "${f}" >> output.txt || true
    

    这样无论简单命令的退出状态如何,复合命令总是成功退出exiftool

    顺便说一句,您对find命令输出的循环很脆弱 - 请参阅为什么循环查找的输出是不好的做法?

    • 2
  2. Best Answer
    waltinator
    2023-03-03T06:47:11+08:002023-03-03T06:47:11+08:00

    检查一个空文件并且不要求exiftool处理它:

    if [[ -s "${f}" ]] ; then
       exiftool "${f}" >>output.txt
    else
        echo "Empty" >>output.txt
    fi
    

    阅读man bash。

    • 1

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve