Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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
Linux 用Bash脚本查找、处理和重命名文件?_Linux_Bash - Fatal编程技术网

Linux 用Bash脚本查找、处理和重命名文件?

Linux 用Bash脚本查找、处理和重命名文件?,linux,bash,Linux,Bash,我正在尝试编写一个脚本,该脚本将运行我服务器上的所有文件(在各个子目录下),查找.jpeg文件,并通过一个转换器运行它们,该转换器将它们转换为非渐进式jpg 我有: find /home/disk2/ -type f -iname "*.jpg" 找到所有的文件 然后,如果它找到例如1.jpg,我需要运行: /usr/bin/jpegtrans /file location/1.jpg > /file location/1.jpg.temp jpegtrans应用程序将文件转换为临

我正在尝试编写一个脚本,该脚本将运行我服务器上的所有文件(在各个子目录下),查找.jpeg文件,并通过一个转换器运行它们,该转换器将它们转换为非渐进式jpg

我有:

 find /home/disk2/ -type f -iname "*.jpg" 
找到所有的文件

然后,如果它找到例如1.jpg,我需要运行:

/usr/bin/jpegtrans /file location/1.jpg > /file location/1.jpg.temp
jpegtrans应用程序将文件转换为临时文件,需要替换原始文件。 因此,我需要删除原始文件并将1.jpg.temp重命名为1.jpg

 rm /file location/1.jpg
 mv /file location/1.jpg.temp /file location/1.jpg

我可以轻松地对单个文件执行此操作,但我需要在服务器上执行100次。

使用
查找
-exec

find /home/disk2/ -type f -iname "*.jpg" -exec sh -c "/usr/bin/jpegtrans {} > {}.temp; mv -f {}.temp {}" \;
编辑:用于处理文件名中的空格,例如:

find /home/disk2/ -type f -iname "*.jpg" -exec sh -c "/usr/bin/jpegtrans '{}' > '{}.temp'; mv -f '{}.temp' '{}'" \;

谢谢-文件夹中的空格似乎有问题。我试着把“{}>{}.temp”放进去,但似乎没有help@Greg上面的编辑包含一个处理空间的示例。