拡張子が「.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...)
bashのパラメーター置換メカニズム を使用して、一致するサフィックスパターンを削除します。
for file in *.old; do
mv -- "$file" "${file%%.old}"
done
使用しているオペレーティングシステムについては言っていませんが、多くのLinuxディストリビューションには、このために使用できるrename
コマンドがあります。実際には2つのまったく異なるrename
コマンドがあります。Debianと同様のシステムは1つを提供し、RedHatと同様のシステムは別のコマンドを提供しますが、どちらでもここで機能します。
DebianベースのPerl、rename
、Ubuntuなど。 prename manual を参照してください。
Util-Linux rename
on Redhatなど。参照: rename manual 。
Debianなどでは、次のことができます。
rename 's/\.old$//' *
または:
rename s/.MOV.mov/.mov/ *.*
Redhatなどでは、次のことができます。
rename .old "" *
http://file-folder-ren.sourceforge.net/ のような複数の名前変更ツールがたくさんあります
しかし、名前を変更する最も速い方法は、次のような単純なスクリプトだと思います。
for i in *.old
do
mv -- "$i" "${i%.old}"
done
エラーチェックは行われず、ターゲットファイルが存在する場合は上書きされる可能性があることに注意してください。
(名前変更ツールを使用するのではなく)シェル(Bash)プログラミングへの回答を制限したい場合は、次のことを試してください。
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
を引用符で囲んでいます。