私のフォルダには、次のような名前のファイルがたくさんあります。
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/\.[^.]*\././' *
prename
Perl式を使用してファイル名を変更できます。
一部のシステムでは、同じプログラムがrename
代わりに(または同様に)呼び出されますprename
。rename
非常に異なる動作をする他のプログラムもあります。rename
確認するには、システムのマニュアルページを確認してください。
たとえば、Debianシステムでは、デフォルトではシステムを介したrename
シンボリックリンクです。他のディストリビューションは異なる場合があります。prename
/etc/alternatives
rename
Debian には、改良版を含むパッケージもあります。以下は同じスクリプトの更新版です。代替案の中で優先順位が高いので、パッケージをインストールするとシンボリックリンクが 。prename
file-rename
rename
file-rename
答え3
これは処理する必要があります
for file in $(find ./)
do
newname=$(echo ${file} | sed -e 's/\.\(.*\)\././')
mv ${file} ${newname}
done