当涉及到快速转换一堆文件并随机重命名它们时,我使用了一个非常简单的方法,使用for循环:
for i in *; do convert [...] $i ../output/$RANDOM.jpg; done就这么简单。在这里,imagemagick的细节并不重要。它的工作原理是预期的。这只是关于如何处理狂欢的事情。
现在我的当前情况--文件夹不仅包含照片,而且还包含其他照片本身的子文件夹。预期的行为再次是,所有照片被随机重命名,输出文件合并在一个文件夹中。
由于我不知道递归循环for的方法,所以这里使用了find构造。
find . \( -iname "*.jpg" -or -iname "*.png" \) -exec convert [...] {} ../output/$RANDOM.jpg \;的问题是,$RANDOM只被调用一次,所以它在整个过程中保持不变,图像被一次又一次地覆盖。因此,实际上输出文件夹只处理一个图像,处理最后一个图像。
因此,问题是:如何使$RANDOM变量与每个新文件一起更改?
亲切的问候!
发布于 2019-03-04 17:27:32
把它扔进一个循环。
find . \( -iname "*.jpg" -or -iname "*.png" \) -type f -print0 |
while read -d '' -r f
do convert [...] "$f" ../output/$RANDOM.jpg # copied mostly from your find above
done如果您从未在文件名中嵌入换行符,则-print0和read -d ''是不必要的。
https://stackoverflow.com/questions/54988294
复制相似问题