拡張子を削除して複数のファイルの名前を変更する方法は?


13

次の名前のTIFFファイルがいくつかあります。

sw.001.tif
sw.002.tif
...

そして.tif、各ファイルの最後にあるを削除したいと思います。renameコマンドを使用してこれを行うにはどうすればよいですか?


2
LinuxまたはUNIXファイルシステムはWindowsまたはVMSスタイルの「拡張子」を使用しないことに注意してください。ファイル名の接尾辞が「.tif」または「.c」または「.o」または「.soまたは何でも。
ブルースエディガー

それは大丈夫です... WindowsからLinuxにファイルをインポートしています:)
Paul

1
技術的に言えば、Windowsはファイル拡張子も使用しません。Windows95のファイルマネージャーは、MS-DOS命名スキームから抜け出した後、ファイルタイプの判別にファイル名の最後の文字を使用し続けただけです。
RAKK

回答:


23

perlrename(通常はDebianでも呼ばれるprename)や、この派生物renameDebianのパッケージ):

rename 's/\.tif$//' *.tif

util-linux rename(通常、Red Hat、rename.ulDebianにあります):

rename -- .tif '' *.tif

(名前がに変更blah.tiffany.tifされることに注意してくださいblahfany.tif


2
「Debian」の名前の変更はLarry Wall(Perlに付属しますか?)によるもので、「Red Hat」の名前はutil-linux(Debian IIRCのrename.ul)によるものだと思います。
XTL

@XTL:はい。DebianやRed Hatの派生物にある「名前変更」プログラムだからです。
イグナシオバスケス-エイブラムス

本当にありがとう!「名前の変更」にはさまざまなバージョンがあることに気づきませんでした。debianとredhatのコマンドには微妙な違いがあると思います。それらの違いのいくつかを調べる必要があります。
ポール

6

名前を変更しない場合は、次を実行できます。

$ for i in *.tif; do mv -i $i `basename $i .tif`; done

(-iファイルの置換に対して警告する)


15
より安全な高速バージョン:for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
jw013

ここで最後のコメントに+1。空のスペースを含むファイル名の方が安全です。
ペトベンズ

1
@ jw013あなたのコメントはトップレベルの答えであるべきです。
ローランド

1
rename -- .oldext .newext *.oldext

これにより、古い拡張子が新しい拡張子に置き換えられます。拡張機能を単純に削除するには、空の文字列を引数として明示的に渡すことができます。

rename -- .gz.tmp  '' *.gz.tmp

上記のコマンドを使用すると.gz.tmp、現在のフォルダー内の拡張子を持つすべてのファイルの名前が変更されますfilename.gzます。

記事「Linux:複数ファイルのファイル拡張子の削除」を参照してください。


1
これは、util-linuxの実装がからrenameの従来のrenameコマンドと互換性がない(そしてより制限されている)ことを前提としていますperl
ステファンシャゼル

また、必ずしも拡張子ではなく、ファイル名内で最初に出現するものを置き換えることに注意してください.oldext(名前foo.oldextasy.oldextがに変更されますfootasy.oldext)。
ステファンシャゼル

1

IBM AIXを使用する場合、renameコマンドはありません。そのため、ファイル拡張子をバッチで削除するには、単純なSystem V UNIXコマンドを使用する必要があります。

for file in *.tif; do
   mv $file `echo $file | sed 's/.tif$//'`;
done;

-2

これを再帰的にできますか

for i in *.gz; do mv -i $i `basename $i .gz`; done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.