我有一个文件夹,其中包含大量不同类型的文件,即.pdf,.jpg,.png,.tiff等等,但都以扩展名命名.JPG。我怎样才能用它们原来的扩展名重命名它们呢? IEpdf到pdf,蒂夫到蒂夫等等。
我可以通过以下方式找到文件类型:
file 99.jpg
99.jpg: PDF document, version 1.3
有没有任何脚本或程序可以用来执行此操作?
答案1
您可以使用通过以下方式找到的 MIME 类型file
:
#! /usr/bin/env bash
for f in ./*.JPG; do
type=$(file -bi "$f")
type=${type%%;*}
base=${f%.*}
final=
case "$type" in
application/pdf) final="$base".pdf ;;
image/png) final="$base".png ;;
image/tiff) final="$base".tiff ;;
esac
if [ "$final" ]; then
printf '%s --> %s\n' "$f" "$final"
# mv -f "$f" "$final"
fi
done
case
如果需要,可以添加更多类型(但省略image/jpeg
,因为 JPEG 文件已经具有正确的扩展名)。检查更改,然后mv
在对结果满意时取消注释该行。
答案2
生成命令没有运行它们。
用于
mimetype
生成命令字符串列表,然后通过以下命令对其进行调整GNUsed
的代替s
命令:cd ~/messed/up/folder/ # go where the files are... mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG | sed 's#\.[^./"]*/\([^./]*"\)$#\.\1#'
如果某些文件扩展名看起来有点太哑剧-ish,(即
.jpeg
代替等),然后在和之间.jpg
添加所需数量s
的命令,例如:sed '
s
sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#'
一旦输出看起来不错,就可以使用GNU
sed
的 评价e
选项。 (只需在e
最后一个前面加上一个'
即可。)所以整个事情可能看起来像:cd ~/messed/up/folder/ # go where the files are... mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG | sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#e' ls # show results