我有一个包含一些博客图像的目录。现在,我正在寻找一种仅对具有生成的uuid的图像进行批量调整大小的方法。它们具有固定的结构,因此似乎是一种很好的模式。
如何调整这些文件的大小,而不能排除其他所有文件的大小?
mogrify -resize 600 *.png
eeafc286-ac2c-4bed-9e9b-d7d3c55e5965.png
ef0318d2-d3e2-42c2-a45e-8ededbb947ed.png
efcd681e-2c12-4a5a-ac77-5d6bf0a76810.png
error.png
f35a14cf-4b3d-4fc3-a8d3-6ea59a059a36.png
f4b60929-47c3-4b56-9486-e5efd62dc2e8.png
f6b3c4bd-f5ba-4d1d-96dd-6c61d5444a03.png
f76e04a3-75f4-4139-b1c9-080fe1e9fea4.png
fc141aa9-1d49-401f-a38a-734f7b0c142f.png
fdfff9df-2dab-4110-bd2f-b65635a5cb21.png
john.jpg
site_1.png
site_2.png
tech.jpg
答案 0 :(得分:1)
我可能会选择*-*-*-*-*png
,但是如果要具体一点,可以使用glob进行粗略匹配,使用regex进行精细匹配:
for file in *.png
do
[[ $file =~ ^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}\.png$ ]] || continue
mogrify -resize 600 "$file"
done
答案 1 :(得分:0)
如果要使用文件遍历来匹配确切的模式,可以执行以下操作:
mogrify -resize 600 [0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].png
答案 2 :(得分:0)
我会尝试使用这种方法:
find
参数首先找到要修改的文件mogrify
样本squeleton看起来像这样:
files=$( find -regexp "$pattern" )
for file in "$files"; do
mogrify "$file" ;
done
或更短的find -exec
:
# Note: not tested, valid mogrify arguments must be added/handled
# call mogrify for each 'find' results
find -regexp "$pattern" -exec mogrify {} +;
# call mogrify in a subshell for each 'find' results, for finest argument handling
find -regexp "$pattern" -exec sh -c 'mogrify "$@"' {} +;
您将必须在这里“玩弄参数传递和顺序”才能使命令起作用。
注意1:此答案不是关于“哪种模式最适合您的需求”问题,而是关于“查找自定义文件并对其执行命令”的更一般的方法。
注意2:我的答案不包含经过测试和验证的命令,而是使用find
和find -exec
的方法。
(建设性的)反馈意见很受欢迎。
答案 3 :(得分:0)
有百万种方法可以做到这一点。最安全的方法是仅ls |grep "yourpattern" > toprocess
验证文件正确,然后cat toprocess| while read line; do mogrify -resize 600 $line"; done