3

私のサーバーには、以下のようなファイルがたくさんあります。すべてのファイルの名前を JPG から .jpg に変更するスクリプトを作成する必要があります。ファイルの一部には既に .jpg 拡張子が付いていて、一部には付いていないことがわかります。

手伝って頂けますか?私はそれをbashでもphpでも実行できますが、どちらが簡単かはわかりませんが、方法がわかりません。

ありがとう

ジェイソン

jects/Education/UNSW-AGSM-Ground-Floor-Thr/DSC4742JPG.jpg
media/projects/Education/UNSW-AGSM-Ground-Floor-Thr/DSC4749JPG.jpg
media/projects/Education/UNSW-AGSM-Ground-Floor-Thr/DSC4806JPG.jpg
media/projects/Education/UNSW-AGSM-Ground-Floor-Thr/DSC4726JPG.jpg
media/projects/Education/UNSW-AGSM-Ground-Floor-Thr/DSC4716JPG.jpg
media/projects/Education/UNSW-AGSM-Ground-Floor-Thr/AGSM-Ground-Floor-2010-036JPG.jpg
media/projects/Education/UNSW-AGSM-Ground-Floor-Thr/DSC4728JPG.jpg
media/projects/Education/UNSW-AGSM-Ground-Floor-Thr/DSC4736JPG.jpg
media/projects/Education/UNSW-AGSM-Ground-Floor-Thr/DSC4724JPG.jpg
media/projects/Education/St_Gregorys_School/IMG0100JPG
media/projects/Education/St_Gregorys_School/IMG0099JPG
media/projects/Education/St_Gregorys_School/IMG0092JPG
media/projects/Education/St_Gregorys_School/IMG0090JPG
media/projects/Education/St_Gregorys_School/IMG0084JPG
media/projects/Education/St_Gregorys_School/IMG0093JPG
media/projects/Education/St_Gregorys_School/IMG0097JPG
media/projects/Education/St_Gregorys_School/IMG0098JPG
media/projects/Education/St_Gregorys_School/IMG0085JPG
media/projects/Education/St_Gregorys_School/IMG0091JPG
media/projects/Education/St_Gregorys_School/IMG0094JPG
media/projects/Education/St_Gregorys_School/IMG0088JPG
media/projects/Education/St_Gregorys_School/IMG0087JPG
media/projects/Education/St_Gregorys_School/IMG0095JPG
media/projects/Education/St_Gregorys_School/IMG0096JPG
media/projects/Education/St_Gregorys_School/IMG0089JPG
media/projects/Education/St_Gregorys_School/IMG0086JPG
4

5 に答える 5

4
find . -name '*JPG.jpg' -print0 | xargs -0 rename JPG.jpg .jpg
find . -name '*JPG' -print0 | xargs -0 rename JPG .jpg

rename(1)からの標準ツールです。util-linux

于 2010-09-07T06:39:19.570 に答える
3

例のファイル名パターンを考えると、これでうまくいきます:

for F in *[0-9]JPG; do mv $F $F.jpg; done

再帰的な解決策が必要な場合:

find . -name "*[0-9]JPG" -exec mv \{\} \{\}.jpg \;
于 2010-09-07T07:12:52.460 に答える
1

バッシュ4

#!/bin/bash
shopt -s globstar
for file in **/*JPG
do
  mv "$file" "${file/JPG/.jpg}"
done
于 2010-09-07T10:35:37.063 に答える
0

私はこの獣に行きます。最もエレガントなバージョンではありませんが、(大文字と小文字を区別しない)JPG.jpgで終わるファイルの名前を変更します

find . -type f | grep -i -E '(JPG)*\.*(JPG)+$' | while read file ; do mv $file `echo $file | perl -pe 's!(JPG)*\.*(JPG)+$!.jpg!gi'`; done
于 2010-09-07T06:49:40.837 に答える
0

これは大まかにしかテストされていませんが、動作するはずです....

printf '#!/bin/sh\nmv -v $1 "$1".jpg' > addext.sh
chmod u+x addext.sh
find . -type f -name "*[0-9]JPG"  -exec ${PWD}/addext.sh "{}" ";"

これは、GNU ツールを使用して実行していることを前提としています (質問に Linux のタグを付けたので、そうなるでしょう)。

于 2010-09-07T06:40:41.253 に答える