所以我有一个csv文件,其中的图像名称列表如下:
FPC-84WB.jpg
Arctic-Blue.jpg
Azuria.jpg
Azuria-Reflective.jpg
BLACK-REFLECTIVE.jpg
Bronze.jpg
Champagne.jpg
Copper.jpg
Light-Green.jpg
Orange.jpg
Pacific-Blue.jpg
....
last-image.jpg
我想使用find /var/www/html/ -name [name of image] -exec convert [options] {} \;
批量转换所有这些图片,而无需去找到他们确切的目录或路径。那么如何将csv的每一行传递给find命令以批量转换所有这些图像。
我尝试使用谷歌搜索来解决这个问题,但所有出现的问题都是将find
的输出传递给另一个命令或文件,而我想反过来。
pics.csv
我用来在本地计算机上测试:
delta-heat-logo.jpg
two-dogs-designs-logo.jpg
modern-flames-logo.jpg
polyscience-logo.jpg
real-fyre-logo.jpg
the-good-one-logo.jpg
man-law-logo.jpg
american-outdoor-grill-logo.jpg
afd-logo.jpg
KAGspritesheet.png
tec-logo.jpg
ogr-logo.jpg
FPDspritesheet.png
hpc-logo.jpg
primo-logo.jpg
american-fireglass-logo.jpg
napoleon-logo.jpg
cavo-logo.jpg
coc-logo.jpg
fire-magic-logo.jpg
spotix-logo.jpg
fornetto-logo.jpg
Blaze-Grills-Logo.jpg
bge-logo.jpg
DCS-logo.jpg
greatco-logo.jpg
DCS-Logo-HP.jpg
skytech-logo.jpg
afd-logo_1.jpg
homecrest-logo.jpg
Lynx-Logo-BW-White.jpg
fusionchef-logo.jpg
amantii-logo.jpg
pics.txt
good-one-logo.jpg
jatex-logo.jpg
Warming-Trends.jpg
polyscience-logo_1.jpg
SPOTIXspritesheet.png
poly-science-logo.jpg
summerset-logo.jpg
twin-eagles-logo.jpg
面对同样问题的其他人的工作指令是:
find [path] \( $(sed 's/.*/-o -name &/; 1s/-o //' [csv file]) \) -exec convert {} [options] {} \;
答案 0 :(得分:0)
显示的文件名全部仅使用便携式文件名代码集(A-Za-z0-9_-.
)中的字符。假设我们看不到列表中的部分,并且列表长度不超过几百个,那么你可以使用这样的东西:
find /var/www/html/ \( $(sed 's/.*/-o -name &/; 1s/-o //' file.csv) \) \
-exec convert [options] {} \;
如果转换程序在一次调用中接受多个参数,请将\;
替换为+
。
这个想法是你将生成一个看起来像这样的命令:
find /var/www/html/ (
-name FPC-84WB.jpg
-o -name Arctic-Blue.jpg
-o -name Azuria.jpg
-o -name Azuria-Reflective.jpg
-o -name BLACK-REFLECTIVE.jpg
-o -name Bronze.jpg
-o -name Champagne.jpg
-o -name Copper.jpg
-o -name Light-Green.jpg
-o -name Orange.jpg
-o -name Pacific-Blue.jpg
....
-o -name last-image.jpg
) -exec convert [options] {} ;
我在显示find
会看到的内容(我删除了反斜杠,空格分隔了参数)。
关于基本文件名中字符的问题的重要性在于,使用可移植文件名字符集避免了引用每个文件名的需要,这使得工作比您必须处理的工作简单得多(某些可移植文件名字符集之外的字符。文件列表的大小非常重要,不要超出单个命令长度的限制 - 通常很大(如100 KiB或更高),但它不是无限制的。