Как я могу изменить все префиксы файлов в одной команде?

Мне нужно изменить постфиксы всех файлов (все равно .JPEG) на .jpeg (Капитал против нижнего регистра). Есть ли быстрый способ сделать это?

7
задан 12 June 2011 в 01:49

62 ответа

Использовать программу Perl rename, которая установлена ​​по умолчанию:

rename 's/\.JPEG$/.jpeg/' *.JPEG

Первый аргумент - это регулярное выражение Perl, сопоставляющее имена файлов, заканчивающиеся на .JPEG, и заменяет его на .jpeg. [ ! d1]

Второй аргумент выбирает файлы, которые должны быть сопоставлены, в вашем случае каждый файл в текущем каталоге, заканчивающийся на .JPEG. Конечно, вы могли бы указать другое место:

rename 's/\.JPEG$/.jpeg/' ~/Pictures/*.JPEG

Другие ответы, которые я видел:

rename s/.JPEG$/.jpeg/ * - это также переименует такие файлы, как StupidJPEG - Stupi.jpeg потому что точка соответствует любому символу. .JPEG$ является регулярным выражением rename 's/\.JPEG$/\.jpeg/' * - работает, но он менее эффективен, потому что он передает все файлы в текущем каталоге на rename. rename -n 's/.JPEG$/.jpeg/' *.JPEG - опция -n будет отображать переименованные файлы, фактически не переименовывая их («сухой ход»). Поскольку *.JPEG соответствует файлам с пометкой только с .JPEG, проблема с точкой-совпадениями здесь вообще не существует.
14
ответ дан 25 May 2018 в 20:22
  • 1
    Вторая точка не должна быть экранирована, потому что она не является частью соответствующего выражения. В регулярном выражении . соответствует любому символу (за некоторыми исключениями), поэтому точка должна быть экранирована в регулярном выражении \.JPEG$. – Lekensteyn 12 June 2011 в 01:56
  • 2
    Это также работает: for i in *.JPEG; do mv $i $(basename $i .JPEG).jpeg; done – crazy2be 12 June 2011 в 04:43
  • 3
    @ crazy2be: Ответьте на это. Это полезно, если rename недоступен. Кроме того, $(basename $i .JPEG) можно заменить на ${i%%.JPEG} (расширение bash) – Lekensteyn 12 June 2011 в 13:36

Хотя это, возможно, не лучшее решение для этого конкретного случая использования, также работает

for i in *.JPEG; do mv "$i" "$(basename "$i" .JPEG).jpeg"; done

. Мы можем сделать некоторые хитрости с bash, чтобы немного повысить эффективность (избегая при вызове дополнительного подпроцесса во внутреннем цикле), заканчивая:

for i in *.JPEG; do mv "$i" "${i%%.JPEG}.jpeg"; done

Это решение наиболее полезно, если вы хотите сделать что-то еще в дополнение к переименованию файлов, например, регистрировать имена, которые были изменены, или даже просто сделать сухой прогон, чтобы убедиться, что он делает то, что вы хотите.

14
ответ дан 31 July 2018 в 11:10

Хотя это, возможно, не лучшее решение для этого конкретного случая использования, также работает

for i in *.JPEG; do mv "$i" "$(basename "$i" .JPEG).jpeg"; done

. Мы можем сделать некоторые хитрости с bash, чтобы немного повысить эффективность (избегая при вызове дополнительного подпроцесса во внутреннем цикле), заканчивая:

for i in *.JPEG; do mv "$i" "${i%%.JPEG}.jpeg"; done

Это решение наиболее полезно, если вы хотите сделать что-то еще в дополнение к переименованию файлов, например, регистрировать имена, которые были изменены, или даже просто сделать сухой прогон, чтобы убедиться, что он делает то, что вы хотите.

14
ответ дан 31 July 2018 в 12:09

Хотя это, возможно, не лучшее решение для этого конкретного случая использования, также работает

for i in *.JPEG; do mv "$i" "$(basename "$i" .JPEG).jpeg"; done

. Мы можем сделать некоторые хитрости с bash, чтобы немного повысить эффективность (избегая при вызове дополнительного подпроцесса во внутреннем цикле), заканчивая:

for i in *.JPEG; do mv "$i" "${i%%.JPEG}.jpeg"; done

Это решение наиболее полезно, если вы хотите сделать что-то еще в дополнение к переименованию файлов, например, регистрировать имена, которые были изменены, или даже просто сделать сухой прогон, чтобы убедиться, что он делает то, что вы хотите.

14
ответ дан 2 August 2018 в 03:20

Хотя это, возможно, не лучшее решение для этого конкретного случая использования, также работает

for i in *.JPEG; do mv "$i" "$(basename "$i" .JPEG).jpeg"; done

. Мы можем сделать некоторые хитрости с bash, чтобы немного повысить эффективность (избегая при вызове дополнительного подпроцесса во внутреннем цикле), заканчивая:

for i in *.JPEG; do mv "$i" "${i%%.JPEG}.jpeg"; done

Это решение наиболее полезно, если вы хотите сделать что-то еще в дополнение к переименованию файлов, например, регистрировать имена, которые были изменены, или даже просто сделать сухой прогон, чтобы убедиться, что он делает то, что вы хотите.

14
ответ дан 4 August 2018 в 19:17

Хотя это, возможно, не лучшее решение для этого конкретного случая использования, также работает

for i in *.JPEG; do mv "$i" "$(basename "$i" .JPEG).jpeg"; done

. Мы можем сделать некоторые хитрости с bash, чтобы немного повысить эффективность (избегая при вызове дополнительного подпроцесса во внутреннем цикле), заканчивая:

for i in *.JPEG; do mv "$i" "${i%%.JPEG}.jpeg"; done

Это решение наиболее полезно, если вы хотите сделать что-то еще в дополнение к переименованию файлов, например, регистрировать имена, которые были изменены, или даже просто сделать сухой прогон, чтобы убедиться, что он делает то, что вы хотите.

14
ответ дан 6 August 2018 в 03:30

Хотя это, возможно, не лучшее решение для этого конкретного случая использования, также работает

for i in *.JPEG; do mv "$i" "$(basename "$i" .JPEG).jpeg"; done

. Мы можем сделать некоторые хитрости с bash, чтобы немного повысить эффективность (избегая при вызове дополнительного подпроцесса во внутреннем цикле), заканчивая:

for i in *.JPEG; do mv "$i" "${i%%.JPEG}.jpeg"; done

Это решение наиболее полезно, если вы хотите сделать что-то еще в дополнение к переименованию файлов, например, регистрировать имена, которые были изменены, или даже просто сделать сухой прогон, чтобы убедиться, что он делает то, что вы хотите.

14
ответ дан 7 August 2018 в 21:18

Хотя это, возможно, не лучшее решение для этого конкретного случая использования,

  для i в * .JPEG;  do mv "$ i" "$ (basename" $ ​​i ".JPEG) .jpeg";  сделано  

тоже произведение. Мы можем сделать некоторую сложность с bash, чтобы немного повысить эффективность (избегая при вызове дополнительного подпроцесса во внутреннем цикле), в результате получим:

  для i в * .JPEG;  do mv "$ i" "$ {i %%. JPEG} .jpeg";  done  

Это решение наиболее полезно, если вы хотите сделать что-то еще в additon для переименования файлов, например, для регистрации того, какие имена были изменены, или даже просто сделать сухой ход, чтобы убедиться, что он делает то, что вы хотите.

14
ответ дан 10 August 2018 в 09:36

Хотя это, возможно, не лучшее решение для этого конкретного случая использования,

  для i в * .JPEG;  do mv "$ i" "$ (basename" $ ​​i ".JPEG) .jpeg";  сделано  

тоже произведение. Мы можем сделать некоторую сложность с bash, чтобы немного повысить эффективность (избегая при вызове дополнительного подпроцесса во внутреннем цикле), в результате получим:

  для i в * .JPEG;  do mv "$ i" "$ {i %%. JPEG} .jpeg";  done  

Это решение наиболее полезно, если вы хотите сделать что-то еще в additon для переименования файлов, например, для регистрации того, какие имена были изменены, или даже просто сделать сухой ход, чтобы убедиться, что он делает то, что вы хотите.

14
ответ дан 13 August 2018 в 15:47
  • 1
    Вторая точка не должна быть экранирована, потому что она не является частью соответствующего выражения. В регулярном выражении . соответствует любому символу (за некоторыми исключениями), поэтому точка должна быть экранирована в регулярном выражении \. JPEG $ . – Lekensteyn 12 June 2011 в 01:56
  • 2
    Это также работает: для i в * .JPEG; do mv $ i $ (basename $ i .JPEG) .jpeg; сделано – crazy2be 12 June 2011 в 04:43
  • 3
    @ crazy2be: Ответьте на это. Это полезно, если rename недоступен. Кроме того, $ (basename $ i .JPEG) можно заменить на $ {i %%. JPEG} (расширение bash) – Lekensteyn 12 June 2011 в 13:36
  • 4
    Я рекомендую помещать переменные между двойными кавычками, для изображений нередко есть пробелы в их именах. – Lekensteyn 13 June 2011 в 13:53
  • 5
    Готово! Я забыл об этом, он работал в моем тесте (файлы с именем 1-1000.JPEG последовательно): P. – crazy2be 14 June 2011 в 09:39

Используйте программу Perl rename , которая установлена ​​по умолчанию:

  rename '/ \. JPEG $ /. jpeg /' * .JPEG  

Первый аргумент - это регулярное выражение Perl, сопоставляющее имена файлов, заканчивающиеся на .JPEG , и заменяет его на .jpeg .

Второй аргумент выбирает файлы, которые должны быть сопоставлены, в вашем случае каждый файл в текущем каталоге, заканчивающийся на .JPEG . Конечно, вы могли бы указать другое место:

  rename '/ \. JPEG $ /. Jpeg /' ~ / Pictures / *. JPEG  

Другие ответы, которые я видел:

  • rename s / .JPEG $ /. Jpeg / * - это также будет переименовывать файлы типа StupidJPEG to Stupi.jpeg , потому что точка соответствует любому символу. .JPEG $ - это регулярное выражение
  • rename 's / \. JPEG $ / \. jpeg /' * - работает, но он менее эффективен потому что он передает все файлы в текущем каталоге на rename .
  • rename -n 's / .JPEG $ /. jpeg /' * .JPEG - опция -n будет показывать переименованные файлы, фактически не переименовывая их («сухой ход»). Поскольку *. JPEG соответствует файлам, отмеченным только с помощью .JPEG , проблема с точкой-совпадениями здесь отсутствует.
14
ответ дан 15 August 2018 в 22:37
  • 1
    Вторая точка не должна быть экранирована, потому что она не является частью соответствующего выражения. В регулярном выражении . соответствует любому символу (за некоторыми исключениями), поэтому точка должна быть экранирована в регулярном выражении \. JPEG $ . – Lekensteyn 12 June 2011 в 01:56
  • 2
    Это также работает: для i в * .JPEG; do mv $ i $ (basename $ i .JPEG) .jpeg; сделано – crazy2be 12 June 2011 в 04:43
  • 3
    @ crazy2be: Ответьте на это. Это полезно, если rename недоступен. Кроме того, $ (basename $ i .JPEG) можно заменить на $ {i %%. JPEG} (расширение bash) – Lekensteyn 12 June 2011 в 13:36

Для этого есть инструмент:

sudo apt-get install renameutils или нажмите renameutils

(если он еще не установлен)

, где вы можете сделать (из команды line):

rename s/\.JPEG$/\.jpeg/ *.JPEG

3
ответ дан 25 May 2018 в 20:22

Нашел секунду после публикации:

rename 's/\.JPEG$/.jpeg/' *
2
ответ дан 25 May 2018 в 20:22
  • 1
    Небольшая оптимизация, но для большого количества файлов мой ответ (и ответ tgm) предпочтительнее, потому что он отправляет меньше файлов в rename для синтаксического анализа. * соответствует всем в каталоге, где *.JPEG действительно соответствует только файлам, добавленным в .JPEG. – Lekensteyn 12 June 2011 в 02:06

Хотя это, возможно, не лучшее решение для этого конкретного случая использования, также работает

for i in *.JPEG; do mv "$i" "$(basename "$i" .JPEG).jpeg"; done

. Мы можем сделать некоторые хитрости с bash, чтобы немного повысить эффективность (избегая при вызове дополнительного подпроцесса во внутреннем цикле), заканчивая:

for i in *.JPEG; do mv "$i" "${i%%.JPEG}.jpeg"; done

Это решение наиболее полезно, если вы хотите сделать что-то еще в дополнение к переименованию файлов, например, регистрировать имена, которые были изменены, или даже просто сделать сухой прогон, чтобы убедиться, что он делает то, что вы хотите.

2
ответ дан 25 May 2018 в 20:22
  • 1
    Я рекомендую помещать переменные между двойными кавычками, для изображений нередко есть пробелы в их именах. – Lekensteyn 13 June 2011 в 13:53
  • 2
    Готово! Я забыл об этом, он работал в моем тесте (файлы с именем 1-1000.JPEG последовательно): P. – crazy2be 14 June 2011 в 09:39

Используйте команду rename.

Что-то вроде этой команды должно работать (для всех файлов, которые заканчиваются на .JPEG, меняйте .JPEG на .jpeg). Это не так, как нужно, и это часто вызывает путаницу, потому что это было специально создано с переименованием изображений.

rename -n 's / .JPEG $ /. jpeg /' * .JPEG

1
ответ дан 25 May 2018 в 20:22

Выполнение параллельных операций становится все более важным, поэтому я рекомендую:

parallel mv {} {.}.jpg ::: *.JPG

Эта утилита по умолчанию не установлена.

1
ответ дан 25 May 2018 в 20:22
  • 1
    Приятно знать об этом, но мне действительно нужно что-то быстрое и грязное, и на самом деле не важно производительность / эффективность – Itay Moav -Malimovka 12 June 2011 в 16:33

Если вы ищете хорошее графическое решение и не хотите гадать со сложными аргументами командной строки, для переименования файлов имеется отличный скрипт Nautilus. Он имеет простой интерфейс и множество опций.

Доступно здесь: http://gnome-look.org/content/show.php/Renamer?content=87601

0
ответ дан 25 May 2018 в 20:22

Нашел секунду после публикации:

rename 's/\.JPEG$/.jpeg/' *
2
ответ дан 25 July 2018 в 21:44
  • 1
    Небольшая оптимизация, но для большого количества файлов мой ответ (и ответ tgm) предпочтительнее, потому что он отправляет меньше файлов в rename для синтаксического анализа. * соответствует всем в каталоге, где *.JPEG действительно соответствует только файлам, добавленным в .JPEG. – Lekensteyn 12 June 2011 в 02:06

Хотя это, возможно, не лучшее решение для этого конкретного случая использования, также работает

for i in *.JPEG; do mv "$i" "$(basename "$i" .JPEG).jpeg"; done

. Мы можем сделать некоторые хитрости с bash, чтобы немного повысить эффективность (избегая при вызове дополнительного подпроцесса во внутреннем цикле), заканчивая:

for i in *.JPEG; do mv "$i" "${i%%.JPEG}.jpeg"; done

Это решение наиболее полезно, если вы хотите сделать что-то еще в дополнение к переименованию файлов, например, регистрировать имена, которые были изменены, или даже просто сделать сухой прогон, чтобы убедиться, что он делает то, что вы хотите.

2
ответ дан 25 July 2018 в 21:44
  • 1
    Вторая точка не должна быть экранирована, потому что она не является частью соответствующего выражения. В регулярном выражении . соответствует любому символу (за некоторыми исключениями), поэтому точка должна быть экранирована в регулярном выражении \.JPEG$. – Lekensteyn 12 June 2011 в 01:56
  • 2
    Это также работает: for i in *.JPEG; do mv $i $(basename $i .JPEG).jpeg; done – crazy2be 12 June 2011 в 04:43
  • 3
    @ crazy2be: Ответьте на это. Это полезно, если rename недоступен. Кроме того, $(basename $i .JPEG) можно заменить на ${i%%.JPEG} (расширение bash) – Lekensteyn 12 June 2011 в 13:36
  • 4
    Я рекомендую помещать переменные между двойными кавычками, для изображений нередко есть пробелы в их именах. – Lekensteyn 13 June 2011 в 13:53
  • 5
    Готово! Я забыл об этом, он работал в моем тесте (файлы с именем 1-1000.JPEG последовательно): P. – crazy2be 14 June 2011 в 09:39

Если вы ищете хорошее графическое решение и не хотите гадать со сложными аргументами командной строки, для переименования файлов имеется отличный скрипт Nautilus. Он имеет простой интерфейс и множество опций.

Доступно здесь: http://gnome-look.org/content/show.php/Renamer?content=87601

0
ответ дан 25 July 2018 в 21:44

Выполнение параллельных операций становится все более важным, поэтому я рекомендую:

parallel mv {} {.}.jpg ::: *.JPG

Эта утилита по умолчанию не установлена.

1
ответ дан 25 July 2018 в 21:44
  • 1
    Приятно знать об этом, но мне действительно нужно что-то быстрое и грязное, и на самом деле не важно производительность / эффективность – Itay Moav -Malimovka 12 June 2011 в 16:33

Используйте команду rename.

Что-то вроде этой команды должно работать (для всех файлов, которые заканчиваются на .JPEG, меняйте .JPEG на .jpeg). Это не так, как нужно, и это часто вызывает путаницу, потому что это было специально создано с переименованием изображений.

rename -n 's / .JPEG $ /. jpeg /' * .JPEG

1
ответ дан 25 July 2018 в 21:44

Для этого есть инструмент:

sudo apt-get install renameutils или нажмите renameutils

(если он еще не установлен)

, где вы можете сделать (из команды line):

rename s/\.JPEG$/\.jpeg/ *.JPEG

3
ответ дан 25 July 2018 в 21:44

Нашел секунду после публикации:

rename 's/\.JPEG$/.jpeg/' *
2
ответ дан 31 July 2018 в 11:10
  • 1
    Небольшая оптимизация, но для большого количества файлов мой ответ (и ответ tgm) предпочтительнее, потому что он отправляет меньше файлов в rename для синтаксического анализа. * соответствует всем в каталоге, где *.JPEG действительно соответствует только файлам, добавленным в .JPEG. – Lekensteyn 12 June 2011 в 02:06

Если вы ищете хорошее графическое решение и не хотите гадать со сложными аргументами командной строки, для переименования файлов имеется отличный скрипт Nautilus. Он имеет простой интерфейс и множество опций.

Доступно здесь: http://gnome-look.org/content/show.php/Renamer?content=87601

0
ответ дан 31 July 2018 в 11:10

Выполнение параллельных операций становится все более важным, поэтому я рекомендую:

parallel mv {} {.}.jpg ::: *.JPG

Эта утилита по умолчанию не установлена.

1
ответ дан 31 July 2018 в 11:10
  • 1
    Приятно знать об этом, но мне действительно нужно что-то быстрое и грязное, и на самом деле не важно производительность / эффективность – Itay Moav -Malimovka 12 June 2011 в 16:33

Используйте команду rename.

Что-то вроде этой команды должно работать (для всех файлов, которые заканчиваются на .JPEG, меняйте .JPEG на .jpeg). Это не так, как нужно, и это часто вызывает путаницу, потому что это было специально создано с переименованием изображений.

rename -n 's / .JPEG $ /. jpeg /' * .JPEG

1
ответ дан 31 July 2018 в 11:10

Для этого есть инструмент:

sudo apt-get install renameutils или нажмите renameutils

(если он еще не установлен)

, где вы можете сделать (из команды line):

rename s/\.JPEG$/\.jpeg/ *.JPEG

3
ответ дан 31 July 2018 в 11:10

Нашел секунду после публикации:

rename 's/\.JPEG$/.jpeg/' *
2
ответ дан 31 July 2018 в 12:09
  • 1
    Небольшая оптимизация, но для большого количества файлов мой ответ (и ответ tgm) предпочтительнее, потому что он отправляет меньше файлов в rename для синтаксического анализа. * соответствует всем в каталоге, где *.JPEG действительно соответствует только файлам, добавленным в .JPEG. – Lekensteyn 12 June 2011 в 02:06

Если вы ищете хорошее графическое решение и не хотите гадать со сложными аргументами командной строки, для переименования файлов имеется отличный скрипт Nautilus. Он имеет простой интерфейс и множество опций.

Доступно здесь: http://gnome-look.org/content/show.php/Renamer?content=87601

0
ответ дан 31 July 2018 в 12:09

Выполнение параллельных операций становится все более важным, поэтому я рекомендую:

parallel mv {} {.}.jpg ::: *.JPG

Эта утилита по умолчанию не установлена.

1
ответ дан 31 July 2018 в 12:09
  • 1
    Приятно знать об этом, но мне действительно нужно что-то быстрое и грязное, и на самом деле не важно производительность / эффективность – Itay Moav -Malimovka 12 June 2011 в 16:33

Другие вопросы по тегам:

Похожие вопросы: