Найти файлы без расширения в linux и массово переименовать их - PullRequest
3 голосов
/ 07 сентября 2010

У меня есть куча файлов на моем сервере, которые выглядят как показано ниже.Мне нужно написать скрипт, который переименует все файлы из 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

Ответы [ 5 ]

4 голосов
/ 07 сентября 2010
find . -name '*JPG.jpg' -print0 | xargs -0 rename JPG.jpg .jpg
find . -name '*JPG' -print0 | xargs -0 rename JPG .jpg

rename(1) - стандартный инструмент от util-linux

3 голосов
/ 07 сентября 2010

Учитывая шаблоны имени файла в вашем примере, это поможет:

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

Если вам нужно рекурсивное решение:

find . -name "*[0-9]JPG" -exec mv \{\} \{\}.jpg \;
1 голос
/ 07 сентября 2010

Баш 4

#!/bin/bash
shopt -s globstar
for file in **/*JPG
do
  mv "$file" "${file/JPG/.jpg}"
done
0 голосов
/ 07 сентября 2010

Я бы пошел за этим зверем.Не самая элегантная версия, но переименует любые файлы, заканчивающиеся (без учета регистра) 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
0 голосов
/ 07 сентября 2010

Это только непроверенная проверка, но она должна работать ....

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).

...