2013-03-02 49 views
2

我正在寻找一种方法来自动化重命名具有错误文件扩展名的所有图像。到目前为止,我至少发现如何获得所有这些文件的列表:使用不正确的文件扩展名查找并重命名所有图片

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 -lgrep -lH像我认为他们会不会只列出文件名。

回答

1

-l-Hgrep的标志在您的示例中无用。这些标志与标准输入一起使用时不起作用,就像你的例子来自管道。如果您指定的文件(或目录和-r标志递归)这些标志只工作,例如:

grep -rl PNG path/to/dir1 file2 file3 

在您的示例-l没有任何效果,所以输出的完整的生产线相匹配PNG,这在你的例子大概是这个样子:

的icon.png:PNG图像,512×512,8位/彩色RGBA,非隔行扫描

为了只获取文件名,也许你可以切断像这样的冒号后的所有内容:

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

谢谢你,这是有效的。因为'grep -l'在我的命令和你的命令中给我提供了错误,但是除了它完全符合它的要求之外,我不得不使用grep。 – user2044638 2013-03-03 01:26:17

+0

噢,是的,我不应该在我的最后一个例子中放置'-l',那只是一个复制和粘贴错误...(现在修复它) – janos 2013-03-03 08:05:44