同じ2文字間のテキストが削除されるように、フォルダ内のすべてのファイルの名前を変更します。

同じ2文字間のテキストが削除されるように、フォルダ内のすべてのファイルの名前を変更します。

私のフォルダには、次のような名前のファイルがたくさんあります。

abc.test.txt
edf.main.txt
num2.tb.doc
file3.map.csv
file4.test.csv

間にあるテキストが削除されるようにファイルの名前を変更し.、上記のファイルの名前を次のように変更しようとします。

abc.txt
edf.txt
num2.doc
file3.csv
file4.csv

可能ですか?

似たようなものが見つかりましたが、私のニーズに合っていませんでした。

文字や文字列を削除して複数のファイルの名前を変更するには?

答え1

zsh では、次を使用します。zmv。実行するautoload -U zmvか、「/.zshrc」に入れてから

zmv '(*).*(.*)' '$1$2'

または

zmv -w '*.*.*' '$1.$3'

または、次のprenameコマンド(各ファイル名に式を適用するPerlスクリプト)がある場合:

prename 's/\..*\././' *.*.*

シェルを使用して、各POSIXシステムで利用可能なツールのみを使用してください。リングパラメータ拡張名前の一部を抽出します。

for x in *.*.*; do
  mv -- "$x" "${x%.*.*}.${x##*.}"
done

答え2

Perl 名前変更ユーティリティを使用します。

prename 's/\.[^.]*\././' *

prenamePerl式を使用してファイル名を変更できます。

一部のシステムでは、同じプログラムがrename代わりに(または同様に)呼び出されますprenamerename非常に異なる動作をする他のプログラムもあります。rename確認するには、システムのマニュアルページを確認してください。

たとえば、Debianシステムでは、デフォルトではシステムを介したrenameシンボリックリンクです。他のディストリビューションは異なる場合があります。prename/etc/alternatives

renameDebian には、改良版を含むパッケージもあります。以下は同じスクリプトの更新版です。代替案の中で優先順位が高いので、パッケージをインストールするとシンボリックリンクが 。prenamefile-renamerenamefile-rename

答え3

これは処理する必要があります

for file in $(find ./)
do
  newname=$(echo ${file} | sed -e 's/\.\(.*\)\././')
  mv ${file} ${newname}
done

関連情報