たくさんのファイル(約167k)の名前を変更する必要がありますが、各ファイルのタイトルの一部のみを変更する必要があります。差出人:宛先
Aaaa.bb - 2 tag tag_tag 9tag
Aaaa.bb - 125 tag_tag 9tag
Aaaa.bb - 3567 tag 9tag
:
Aaaa.bb - 000002 tag tag_tag 9tag
Aaaa.bb - 000125 tag_tag 9tag
Aaaa.bb - 003567 tag 9tag
すべて外付けHDDにあります。この状況で役立つツールやスクリプトはありますか?また、Ubuntuなどのトリッキーなことにまだ慣れていないので、答えを簡素化するために質問します。
答え1
bash
、、awk
およびを使用して、私の考えを述べますmv
。
awkの観点からファイル名を見ると、ファイル名はスペースで区切られたフィールドを持つ単なる文字列であり、特に興味深いのはフィールド$3にゼロを埋め込む必要があることです。以下のスクリプトはまさにそれを行います。スクリプトを名前変更したいファイルと同じディレクトリに配置して実行してください。また、次の方法で実行可能であることを確認してください。chmod 755 renamerScript.sh
デモ
testdir:$ ls
Aaaa.bb - 125 tag tag_tag 9tag Aaaa.bb - 2 tag tag_tag 9tag Aaaa.bb - 4207 tag tag_tag 9tag BACKUP/ renamerScript.sh*
testdir:$ ./renamerScript.sh
mkdir: cannot create directory ‘BACKUP’: File exists
cp: omitting directory ‘BACKUP’
renaming Aaaa.bb - 125 tag tag_tag 9tag to Aaaa.bb - 000125 tag tag_tag 9tag
renaming Aaaa.bb - 2 tag tag_tag 9tag to Aaaa.bb - 000002 tag tag_tag 9tag
renaming Aaaa.bb - 4207 tag tag_tag 9tag to Aaaa.bb - 004207 tag tag_tag 9tag
testdir:$ ls
Aaaa.bb - 000002 tag tag_tag 9tag Aaaa.bb - 000125 tag tag_tag 9tag Aaaa.bb - 004207 tag tag_tag 9tag BACKUP/ renamerScript.sh*
脚本
#!/bin/bash
# renamerScript.sh
# Author: Serg Kolo
# Date: Oct 17, 2015
# Purpose : renaming specific files
# Written for: http://askubuntu.com/q/686794/295286
# Make sure you have backup of the files !!!
# comment/uncomment if you do want to do a backup
mkdir BACKUP
cp -t BACKUP *
# This is where the magic happens:
# If we look at filenames from the awk point of view
# "Aaaa.bb - 2 tag tag_tag 9tag" are all really
# space-separated fields. Field #3 is the one we need to edit.
# What we can do is pad it with zeros and then chop off 6
# characters from the end, and store that as new filename
# The rest is just doing mv command from old filename to new
# And also making sure we're operating on files , not directories
# and not renaming the script file,too
for FILENAME in * ;
do
if [ -f "$FILENAME" -a "$FILENAME" != "renamerScript.sh" ]; then
OLDFILENAME="$FILENAME"
NEWFILENAME=$(echo "$FILENAME" | awk '{$3="00000"$3; len=(length($3)-5); $3=(substr($3,len)); print }')
printf "renaming $OLDFILENAME to $NEWFILENAME \n"
mv "$OLDFILENAME" "$NEWFILENAME"
fi
done
答え2
Python と正規表現の使用をお勧めします。以下は、フォルダーとサブフォルダー内のすべてのファイルを変更できる、私が作成したスクリプトの例です。
directoryChosen = (sys.argv[1])
print directoryChosen + " thi is inside dollartohash"
if os.path.isdir(directoryChosen):
for n in os.listdir(directoryChosen):
if not n.startswith('.'):
newname = n.replace('$', '#')
print newname
if newname != n:
path = os.path.join(directoryChosen, n)
print path + " this is path"
target = os.path.join(directoryChosen, newname)
print target + " this is target"
os.rename(path, target)
newdir = directoryChosen.replace('$', '#')
print newdir
if directoryChosen != newdir :
os.rename(directoryChosen, newdir)
ご覧のとおり、ディレクトリを引数として受け取り、シンボルを別のシンボルに変更します。置換部分を変更できると思います。
答え3
Perlベースのrename
コマンドを使用して、スペース、ハイフン、スペースに続く数字のシーケンスを、希望の形式とフィールド幅で再印刷できます。例:
rename -vn -- 's/ - (\d+)/sprintf " - %06d", $1/e' *
(-n フラグは「no op」を意味します。つまり、式をテストするためのドライ ランのみを実行します。正しく動作していることが確実であれば、フラグを削除してください)。
答え4
試すpyRenamerパターン、置換、テキストの挿入または削除を使用してファイル名を変更したり、手動でファイル名を変更したりできる一括ファイル名変更ツールです。
次の機能を備えた GUI ウィンドウがあります:
- ファイル名を変更するためのパターン。ファイル名を変更するための検索と置換。ファイル名の任意の場所に文字を挿入および削除。大文字化 (ファイル名を大文字にする)。一般的な置換。選択したファイルの名前を手動で変更。メタデータを使用して画像の名前を変更します。メタデータを使用して音楽の名前を変更します。ソース
インストール:sudo apt-get install pyrenamer