AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 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

O script Bash para sem erro quando a extração de EXIFs de imagem com exiftool encontra um arquivo vazio

  • 772

Eu tenho este script que processa imagens em subpastas no Ubuntu 22.04 com exiftool 12.57:

#!/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

Mas ele simplesmente para sem lançar nenhum aviso ou erro para stdout/stderr quando atinge um arquivo vazio:

$ 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

O arquivo é de fato um arquivo de 0 byte:

$ 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'

Como eu poderia fazer com que o script continuasse processando outros arquivos, pois ainda existem muitas pastas com fotos para processar?

Informação da versão

$ 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 respostas
  • 66 Views

2 respostas

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

    Para a posteridade e porque também achei muito interessante, reconstruo a resposta do steeldriver como um wiki da comunidade:

    set -efaz com que o shell (script) saia quando exiftoolretorna um status de saída diferente de zero (o que aparentemente acontece quando é passado um arquivo vazio).

    Se você precisar executar o script set -epor outros motivos, poderá:

    • set +eantes do exiftoolcomando e, em seguida, redefinir set -eapós

    ou (mais idiomático, eu acho)

    mudar:

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

    para:

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

    para que o comando composto sempre saia com sucesso, independentemente do status de saída do comando simplesexiftool

    BTW, seu loop sobre a findsaída do comando é frágil - consulte Por que o loop sobre a saída de find é uma prática ruim?

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

    Verifique se há um arquivo vazio e não peça exiftoolpara processá-lo:

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

    Leia man bash.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve