Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使用find递归转换JPG图像?_Bash_Recursion_Directory_Find - Fatal编程技术网

Bash 如何使用find递归转换JPG图像?

Bash 如何使用find递归转换JPG图像?,bash,recursion,directory,find,Bash,Recursion,Directory,Find,基本上,我想做的是递归地搜索工作目录,然后使用给定的路径来调整图像的大小。例如,查找所有*.jpg文件,将其大小调整为300x300,并重命名为which.jpg 我应该按照$(find | grep*.jpg)的思路来获取路径吗?当我这样做时,输出的目录不是用引号括起来的,这意味着我必须先插入它们,然后它才会有用,对吗?您可以在GNU find中使用类似的内容: find . -iname \*jpg -exec /your/image/conversion/script.sh {} + 这

基本上,我想做的是递归地搜索工作目录,然后使用给定的路径来调整图像的大小。例如,查找所有*.jpg文件,将其大小调整为300x300,并重命名为which.jpg


我应该按照
$(find | grep*.jpg)
的思路来获取路径吗?当我这样做时,输出的目录不是用引号括起来的,这意味着我必须先插入它们,然后它才会有用,对吗?

您可以在GNU find中使用类似的内容:

find . -iname \*jpg -exec /your/image/conversion/script.sh {} +
这将在引用方面更安全,并且生成更少的进程。只要脚本能够处理参数列表的长度,此解决方案就应该是最有效的选项

如果您需要处理非常长的文件列表,您可能需要为此付出代价并生成更多进程。您可以修改“查找”以分别处理每个文件。例如:

find . -iname \*jpg -exec /your/image/conversion/script.sh {} \;
我用mogrify和find

比方说,我需要嵌套文件夹/other/folder/*.jpg中的所有内容都位于*.png

find-名称“*.jpg”-print0|xargs-I{}-0 mogrify-format png{}

&&稍加解释:

find-name*.jpeg
——查找嵌套文件夹中的所有jpeg。
-print0
——打印所需的文件名而不产生任何意外(例如:文件名空格分隔)
xargs-I{}-0
——用mogrify逐个处理文件


最后,这些{}只是find结果的虚拟文件名。

谢谢,这很有帮助!问题是我需要把所有的东西都编译成一个*.sh文件,这样它才是可移植的,并且易于分发。。。有没有办法在BASh脚本中调用函数?当然可以。Shell脚本执行命令、别名和函数,尽管有些命令更为有限。有关Bash函数的详细信息,请参见。相关: