拡張子が「.old」のファイルが複数あります。
ファイルを削除せずに ".old"拡張子を削除するにはどうすればよいですか?
手動で行うこともできますが、より多くの作業が必要です。
mv file1.key.old file1.key
mv file2.pub.old file2.pub
mv file3.jpg.old file3.jpg
mv file4.jpg.old file4.jpg
(etc...)
このコマンドは他の拡張機能にも使用できますか?
例:
mv file1.MOV.mov file1.MOV
mv file2.MOV.mov file2.MOV
mv file3.MOV.mov file3.MOV
(etc...)
またはより良い:
mv file1.MOV.mov file1.mov
mv file2.MOV.mov file2.mov
mv file3.MOV.mov file3.mov
(etc...)
答え1
使用bashパラメータ置換メカニズム一致するサフィックスパターンを削除します。
for file in *.old; do
mv -- "$file" "${file%%.old}"
done
答え2
使用しているオペレーティングシステムを指定していませんが、多くのLinuxディストリビューションにはrename
この目的に使用できるコマンドがあります。実際には全く異なる2つのコマンドがありますrename
。 Debian と同様のシステムは 1 つのコマンドを提供し、RedHat と同様のシステムは別のコマンドを提供しますが、ここではどちらか一方が機能します。
rename
Debian、Ubuntuなどに基づくPerlについては、以下を参照してください。名前の本。
rename
RedhatなどのUtil-Linuxについては、以下を参照してください。マニュアルの名前変更。
Debian と同様のシステムでは、次のことができます。
rename 's/\.old$//' *
または:
rename s/.MOV.mov/.mov/ *.*
Redhat と同様のプラットフォームでは、次のことができます。
rename .old "" *
答え3
次のようなさまざまな名前変更ツールがあります。http://file-folder-ren.sourceforge.net/
しかし、名前を変更する最速の方法は、次の簡単なスクリプトだと思います。
for i in *.old
do
mv -- "$i" "${i%.old}"
done
エラーチェックはなく、ターゲットファイルがある場合は上書きできます。
答え4
名前変更ツールを使用するのではなく、シェルプログラミングに回答を制限するには、次のようにします。
for oldname in *.old ; do
newname="${oldname%%.old}"
if [ -e "$newname" ] ; then
echo "Cannot rename $oldname because $newname exists." >&2
else
mv -- "$oldname" "$newname"
fi
done
$oldname
$newname
ファイル名にスペースを含めることができるため、引用符を使用してください。