一部の画像の名前を変更しようとしています。
IMG_1.JPG
IMG_2.JPG
IMG_3.JPG
私はandIMG
で置き換えたいと思います。 - 2番目の部分を実行する方法を知っています。img
.JPG
.jpg
$ rename 's/\.JPG$/\.jpg/' *.JPG
私の問題はそれができないということですmv
IMG_.JPG
。img_.jpg
複数のパターンをに渡すことができることを知っていますが、rename
変更された小文字の値を持つ既存のファイル名を使用できないようです。
私は何をすべきですか?
答え1
Perl rename コマンドを使用する必要があります。私のCentOSコンピュータでは「prename」と呼ばれます。
$ ls
IMG_1.JPG IMG_2.JPG IMG_3.JPG
$ prename 's/^IMG/img/;s/\.JPG$/\.jpg/' *JPG
$ ls
img_1.jpg img_2.jpg img_3.jpg
$
$ prename -h
Usage: prename [OPTION]... PERLEXPR FILE...
Rename FILE(s) using PERLEXPR on each filename.
-b, --backup make backup before removal
-B, --prefix=SUFFIX set backup filename prefix
-f, --force remove existing destinations, never prompt
-i, --interactive prompt before overwrite
-l, --link-only link file instead of reame
-n, --just-print, --dry-run don't rename, implies --verbose
-v, --verbose explain what is being done
-V, --version-control=METHOD override the usual version control
-Y, --basename-prefix=PREFIX set backup filename basename prefix
-z, -S, --suffix=SUFFIX set backup filename suffix
--help display this help and exit
--version output version information and exit
The backup suffix is ~, unless set with SIMPLE_BACKUP_SUFFIX. The
version control may be set with VERSION_CONTROL, values are:
numbered, t make numbered backups
existing, nil numbered if numbered backups exist, simple otherwise
simple, never always make simple backups
Report bugs to [email protected]
$
(時々呼び出される)rename
の愚かなコマンドを使用するには、2つのステップを実行する必要があります。util-linux
rename.ul
$ ls
IMG_1.JPG IMG_2.JPG IMG_3.JPG
$ rename IMG img *JPG
$ rename JPG jpg *JPG
$ ls
img_1.jpg img_2.jpg img_3.jpg
$
答え2
あなたの質問に一般的に答えるには、
1行に2つの条件/交換を使用して複数のファイルの名前を変更しますか?
あなたは一般的に使用しますキャプチャグループ、代替式に使用して適切に参照してください。逆参照。例えば
$ rename -n 's/^(.*)_(.*)\.JPG$/\L$1_$2.jpg/' *.JPG
rename(IMG_2.JPG, img_2.jpg)
rename(IMG_3.JPG, img_3.jpg)
\L
ただし、この特別なケースでは、フルネームに小文字の修飾子を適用する方が簡単です。
$ rename -n 's/.*/\L$&/' *.JPG
rename(IMG_2.JPG, img_2.jpg)
rename(IMG_3.JPG, img_3.jpg)
別のオプションは次のとおりです。mmv
$ mmv -n '*.JPG' '#l1.jpg'
IMG_2.JPG -> img_2.jpg
IMG_3.JPG -> img_3.jpg
(-n
実際に名前を変更するには削除してください)。
答え3
使用mv
:
sh互換性:
for file in *.JPG; do mv "$file" "$(echo "$file" | tr '[:upper:]' '[:lower:]')"; done
bash(スチールドライバーに感謝):
for file in *.JPG; do mv "$file" "${file,,}"; done
その後、現在のディレクトリ内のすべてのファイルを繰り返し.JPG
て名前を同じ名前に変更し、すべての大文字を小文字に変換します。