さまざまな種類のファイルが入ったフォルダがあります。.pdf、.jpg、.png、.tiffなどがあるが、すべて拡張子で命名されている。.JPGこれらすべてを元の拡張子で名前変更するにはどうすればいいでしょうか?pdfに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
必要に応じてにさらにタイプを追加します(ただし、 JPEG ファイルには既に適切な拡張子が付いているため は除外します)。変更内容を確認し、結果に満足したら行のimage/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