我正在寻找一种方法来自动重命名所有文件扩展名错误的图像。到目前为止,我至少找到了如何获取所有这些文件的列表:
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
or grep -lH
不要像我想象的那样只列出文件名。
The -l
and -H
的旗帜grep
在你的例子中没有用。这些标志在与标准输入一起使用时不起作用,就像来自管道的示例一样。这些标志仅在您指定文件(或目录和-r
递归标志),例如:
grep -rl PNG path/to/dir1 file2 file3
在你的例子中-l
没有效果,所以输出是匹配的完整行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/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)