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 -l,或者grep -lH不要像我想的那样只列出文件名。

4

1 回答 1

1

-l-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/
于 2013-03-02T23:48:17.103 回答