Terminal 查找并重命名所有文件扩展名不正确的图片

Terminal 查找并重命名所有文件扩展名不正确的图片,terminal,grep,find,rename,Terminal,Grep,Find,Rename,我正在寻找一种方法来自动重命名所有具有错误文件扩展名的图像。到目前为止,我至少找到了如何获取所有这些文件的列表: find /media/folder/ -name *.jpg -exec file {} \; | grep 'PNG\|GIF' > foobar.txt find /media/folder/ -name *.png -exec file {} \; | grep 'JPEG\|GIF' >> foobar.txt find /media/folder/ -

我正在寻找一种方法来自动重命名所有具有错误文件扩展名的图像。到目前为止,我至少找到了如何获取所有这些文件的列表:

find /media/folder/ -name *.jpg -exec file {} \; | grep  'PNG\|GIF' > foobar.txt
find /media/folder/ -name *.png -exec file {} \; | grep 'JPEG\|GIF' >> foobar.txt
find /media/folder/ -name *.gif -exec file {} \; | grep 'JPEG\|PNG' >> foobar.txt
但是,我也希望自动重命名。我试过这样的方法

find /media/folder/ -name *.jpg -exec file {} \; | grep -l PNG | rename s/.jpg/.png/

但是在这种情况下,
grep-l
grep-lH
不要像我想的那样只列出文件名。
grep
-l
-H
标志在您的示例中没有用处。当与标准输入一起使用时,这些标志没有任何效果,就像您的示例中来自管道的标志一样。这些标志仅在指定文件(或目录以及递归的
-r
标志)时有效,例如:

grep -rl PNG path/to/dir1 file2 file3
在您的示例中,
-l
无效,因此输出是与
PNG
匹配的完整行,在您的示例中,这些行可能如下所示:

find /media/folder/ -name *.jpg -exec file {} \; | grep PNG | sed -e s/:.*// | rename s/.jpg/.png/
icon.png:png图像,512 x 512,8位/彩色RGBA,非隔行扫描

要仅获取文件名,您可以像下面这样切断冒号后面的所有内容:

find /media/folder/ -name *.jpg -exec file {} \; | grep PNG | sed -e s/:.*// | rename s/.jpg/.png/

谢谢,它是这样工作的。我必须在没有任何参数的情况下使用grep,因为
grep-l
在我的命令和你的命令中都会给我错误,但除此之外,它完全按照它应该做的。哦,是的,我不应该在我的上一个示例中使用
-l
,这只是一个复制粘贴错误。。。(现在已修复)