拡張子を持つディレクトリに多くのファイルがあります。
.text(2)
.text(1)
拡張機能から数字を削除したいので、出力は次のようになります
.text
.text
誰でもそのためのシェルスクリプトを手伝ってくれますか?私はCentOs 6.3を使用しています。
ファイルが保存されているフォルダーでワンライナーを起動するか、find
コマンドのパスを変更します。次の例では、find .
パスは.
(ドット)です。
でテストする:
find . -type f -print0 | xargs -I{} -0 rename -v -n 's/\([0-9]+\)$//' {}
次の名前に変更:
find . -type f -print0 | xargs -I{} -0 rename -v 's/\([0-9]+\)$//' {}
このコマンドは、すべてのファイルを再帰的に検索し、ファイル名の最後にあるすべての(<any_number>)
を削除します。
's/\([0-9]+\)$//'
の$
を削除して、ファイル名のどこかにあるすべての出現を削除します。例:
find . -type f -print0 | xargs -I{} -0 rename -v 's/\([0-9]+\)//' {}
例:
% ls -oga
-rw-rw-r-- 1 0 Jun 10 09:34 .foo(1)
-rw-rw-r-- 1 0 Jun 10 09:34 .bar(2)
% find . -type f -print0 | xargs -I{} -0 rename -v 's/\([0-9]+\)$//' {}
% ls -aog
-rw-rw-r-- 1 0 Jun 10 09:34 .foo
-rw-rw-r-- 1 0 Jun 10 09:34 .bar
for i in *.text*; do mv "$i" "$(echo "$i" | sed 's/([0-9]\{1,\})$//')"; done
必要に応じて拡張子(.textまたはその他の拡張子)を変更するだけです。
python
を使用:
#!/usr/bin/env python2
import os, re
for root, dirs, files in os.walk('/path/to/directory'):
for f in files:
oldname = os.path.join(root, f)
newname = os.path.join(root, re.search(r'(?<=/)[^/]+(?=\(\d+\)$)', oldname).group())
os.rename(oldname, newname)
ファイル名の最初の部分を考慮することは(既に述べたように)異なるため、上書きする可能性はありません。
os.walk
は、指定されたディレクトリの下のすべてのサブディレクトリを走査します
oldname
には、変更するファイルの名前が含まれます。 os.path.join
は、os.path.join
によってディレクトリパスにファイル名を追加します
newname
には、oldname
が変更される名前が含まれます。ここでは、re
モジュールを使用してファイル名を取得し、os.path.join
によってディレクトリへのパスにファイル名を追加しました
os.rename
は単にファイルの名前を適宜変更します。
前:
foo
├── 1 spam.text(1)
├── 1.text(23)
└── bar
├── 1 Egg.text(10)
└── 3test.text(5)
後:
foo
├── 1 spam.text
├── 1.text
└── bar
├── 1 Egg.text
└── 3test.text