我想搜索长宽比为 4:3 的照片,然后将它们复制到闪存驱动器中以供数码相框使用。我知道如何在 Windows 中使用height:3000
(例如)图形 shell 执行此操作。如何在 Nautilus 或命令行中执行相同操作?
答案1
您可以使用简单的 shell 脚本来实现此目的。search.sh
使用以下命令在照片文件夹中创建任意文件
gedit search.sh
并粘贴以下几行:
#!/bin/bash
mkdir /home/$USER/test
for i in *.jpg; do
read -r w h <<<$(identify -format "%w %h" "$i")
if [ `expr $h / $w` == `expr 4 / 3` ]; then
cp "$i" /home/$USER/test/
fi
done
Ctrl使用+保存此文件s并使用使其可执行
sudo chmod +x search.sh
然后使用命令执行
./search.sh
它将把所有照片复制4:3
到test
您的主目录中。如果您想复制到闪存驱动器或其他地方,则在脚本中进行更改,如果identify
系统中没有命令,那么您可以使用命令安装:
sudo apt-get install imagemagick
答案2
从递归目录提取图像
以下脚本将以递归方式将比例为 4:3 的图像从源目录复制到目标目录。该脚本读取所有常见图像格式,非图像文件将被忽略(在 中提升IOError
)
#!/usr/bin/env python3
import os
import shutil
from PIL import Image
import sys
dr = sys.argv[1]; target = sys.argv[2]
for root, dirs, files in os.walk(dr):
for f in files:
try:
file = root+"/"+f
img = Image.open(file); size = img.size; ratio = size[0]/size[1]
if ratio == 4/3:
shutil.copyfile(file, target+"/"+f)
except (IOError, ValueError):
pass
如何使用
- 将脚本复制到一个空文件中,另存为
search_ratio.py
通过命令运行:
python3 /path/to/search_ratio.py /source/directory /target/directory
如果一个或多个目录包含空格,请使用引号。
我用于测试的示例命令:
python3 '/home/jacob/Bureaublad/pscript_4.py' '/home/jacob/Bureaublad' '/home/jacob/Afbeeldingen/test'
如果你从“平面”(单一)目录中提取图像
那么脚本可以稍微简单一点:
#!/usr/bin/env python3
import os
import shutil
from PIL import Image
import sys
dr = sys.argv[1]; target = sys.argv[2]
for f in os.listdir(dr):
try:
file = dr+"/"+f
img = Image.open(file); size = img.size; ratio = size[0]/size[1]
if ratio == 4/3:
shutil.copyfile(file, target+"/"+f)
except (IOError, ValueError):
pass
与第一个完全一样使用。
请注意,使用第一个脚本时,如果不同的源文件夹中的名称重复,就会发生名称冲突。