Как массово добавить расширение файла?

Мой импортер фотографий переместил файлы с моей камеры и переименовал их, но я забыл указать, что он должен сохранять расширение файла. Итак У меня есть несколько папок с сотнями JPG & amp; Все файлы AVI не имеют правильного расширения.

Существует не так много видеофайлов, поэтому я могу переименовать их вручную до или после общего массового переименования в JPG.

Чтобы сделать вещи более сложными, имена файлов содержат пробелы, поэтому я не могу просто mv "*" "*.jpg", потому что, ну, это не работает (но это то, что я бы сделал, исходя из DOS / Windows).

Я знаю, что Linux полон мощных команд. Как я могу переименовать файлы, чтобы добавить расширение .jpg, если эти файлы содержат пробелы?

Пожалуйста, не говорите «не используйте пробелы», потому что это действительно не то, что я спрашиваю около. Спасибо.

7
задан 19 June 2014 в 18:45

6 ответов

Шарики Shell должны работать даже с пробелами на имена, если используется правильно, например,

rename -nv -- 's/$/.jpg/' *

или

for file in *; do echo mv -- "$file" "$file.jpg"; done

[ПРИМЕЧАНИЕ: это не 'никакая операция в секунду' до эти n, переключатель или эти echo удален - таким образом, можно проверить корректную замену прежде, чем фиксировать]

, Если бы Вы действительно хотите автоматически различать jpg и avi файлы, которые также были бы возможным использованием более сложного цикла и file или mimetype команда

15
ответ дан 19 June 2014 в 18:45

Если у Вас будет более сложная иерархия, то Вам будет нужен немного более сложный подход. Можно или использовать удар globstar опция, которая позволяет ** соответствуйте нулю или большему количеству каталогов и подкаталогов, или можно использовать find.

  1. globstar

    shopt -s globstar
    for f in **/*; do [ -f "$f" ] && mv "$f" "$f".jpg; done
    

    [ -f "$f" ] & гарантирует что mv команда только выполняется на файлах и не каталогах.

  2. find

    find . -type f -print0 | xargs -0 -I{} mv "{}" "{}".jpg
    

    -type f гарантирует, чтобы мы только нашли файлы и никакие каталоги и print0 причины find распечатать его вывод, разделенный с нулевым символом (\0) вместо новых строк. Это гарантирует, чтобы мы имели дело правильно с именами файлов, содержащими пробелы или новые строки или другую странность.

    xargs берет список входа и выполняет команду, данную на нем. -0 флаг говорит этому ожидать разделенный от пустого указателя вход и -I{} заставит его заменить каждый экземпляр {} с каждой из входных записей (файлы в этом случае) передал.

7
ответ дан 19 June 2014 в 18:45

Я советовал бы использовать программу, названную pyrenamer.

Открытый это, и в Переименованном шаблоне имени файла, входит {1}.jpg.

4
ответ дан 19 June 2014 в 18:45

См. man rename перед попыткой этого

Это должно работать как очарование.

В терминале:

cd /path/to/exported/imgs/folder/
rename  's/(\w+)$/$1\.jpg/' *

измените "jpg" на то, в чем Вы нуждаетесь.

rename может использовать выражения жемчуга.. Ваш лучший друг

В первой строке, Вы ввели свой каталог

cd /path/to/exported/imgs/folder/

файлов s перед выражением, указывает, что замена

rename  's/(\w+)$/$1\.jpg/' *

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

rename  's/(\w+)$/$1\.jpg/' *

И замена добавляют к нему. точечный jpg

rename  's/(\w+)$/$1\.jpg/' *

Наконец относится к любому файлу в первой папке строки

rename  's/(\w+)$/$1\.jpg/' *
4
ответ дан 19 June 2014 в 18:45

Я встречаюсь с этой ситуацией, довольно часто администрирующей системы, особенно при контакте с именами файлов, созданными приложениями Windows. Для добавления .jpg расширения на именах файлов без любого расширения рассмотрите этот список команд.

find ./example -type f -name '*' -print0 | xargs -0 -I'{}' mv '{}' '{}'.jpg

находка -print0 генерирует Нулевые символы для разделителей, xargs's -0 для принятия тех ПУСТЫХ разделителей. Это также сделает это для любых подкаталогов, так, несомненно, заменит это './example' путь.

rename большая команда, но это - дистрибутив, конкретный и в реализации и в спецификации. Я обычно использую вещи как rename на командной строке, но я всегда пишу в GNU utils стандарты для своих сценариев.

2
ответ дан 19 June 2014 в 18:45

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

rename  's/$/.jpg/' *
2
ответ дан 1 August 2020 в 18:25

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

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