我正在寻找一种方法来自动重命名文件扩展名错误的所有图像。到目前为止,我至少知道如何获取所有这些文件的列表:
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
不会列出我认为的文件名。
答案 0 :(得分:1)
-l
的{{1}}和-H
标记在您的示例中无效。与标准输入一起使用时,这些标志无效,例如来自管道的示例。这些标志仅在您指定文件(或目录和递归的grep
标志)时才有效,例如:
-r
在您的示例中,grep -rl PNG path/to/dir1 file2 file3
无效,因此输出是与-l
匹配的完整行,在您的示例中可能看起来像这样:
icon.png:PNG图像,512 x 512,8位/彩色RGBA,非隔行扫描
要获得只有文件名,也许你可以像这样截断冒号之后的所有内容:
PNG