以下情况: 包含许多不同图像文件的文件夹:jpeg,png,gif file *的输出类似于:
filename1: png image data, 300 x 300, some more information bla bla
filename2: gif image data, 300 x 300, some more information bla bla
filename3: jpeg image data, 300 x 300, some more information bla bla
现在,最好的方法是在文件中添加后缀(如image.png),因为这些文件的名称类似于“avatar_pobmglinmphfhbiffgmdmphklcbjolklmnaeblbk”。 所以问题是没有选项(afaik)命令“file”只能输出文件类型和文件名/ -path
我的想象力是管道或查找-exec与文件内部。
非常感谢您的帮助!
答案 0 :(得分:2)
使用read
和process substitution:
while IFS=' ' read img ext n; do
mv ${img%:} ${img%:}.${ext}
done < <(file *)
${img%:}
语法是shell parameter expansion的一部分。它从图像名称中删除尾随:
。
进程替换<(file *)
允许将命令输出作为文件处理。此处将file *
输出重定向为read
命令的输入。
答案 1 :(得分:1)
您可以使用mv
+ cut
:
IFS=$'\n'
for line in $(file *); do
filename=$(echo $line | cut -d: -f1)
extension=$(echo $line | cut -d' ' -f2)
mv $filename "${filename}.${extension}"
done