Мой импортер фотографий переместил файлы с моей камеры и переименовал их, но я забыл указать, что он должен сохранять расширение файла. Итак У меня есть несколько папок с сотнями JPG & amp; Все файлы AVI не имеют правильного расширения.
Существует не так много видеофайлов, поэтому я могу переименовать их вручную до или после общего массового переименования в JPG.
Чтобы сделать вещи более сложными, имена файлов содержат пробелы, поэтому я не могу просто mv "*" "*.jpg"
, потому что, ну, это не работает (но это то, что я бы сделал, исходя из DOS / Windows).
Я знаю, что Linux полон мощных команд. Как я могу переименовать файлы, чтобы добавить расширение .jpg, если эти файлы содержат пробелы?
Пожалуйста, не говорите «не используйте пробелы», потому что это действительно не то, что я спрашиваю около. Спасибо.
Шарики Shell должны работать даже с пробелами на имена, если используется правильно, например,
rename -nv -- 's/$/.jpg/' *
или
for file in *; do echo mv -- "$file" "$file.jpg"; done
[ПРИМЕЧАНИЕ: это не 'никакая операция в секунду' до эти n
, переключатель или эти echo
удален - таким образом, можно проверить корректную замену прежде, чем фиксировать]
, Если бы Вы действительно хотите автоматически различать jpg и avi файлы, которые также были бы возможным использованием более сложного цикла и file
или mimetype
команда
Если у Вас будет более сложная иерархия, то Вам будет нужен немного более сложный подход. Можно или использовать удар globstar
опция, которая позволяет **
соответствуйте нулю или большему количеству каталогов и подкаталогов, или можно использовать find
.
globstar
shopt -s globstar
for f in **/*; do [ -f "$f" ] && mv "$f" "$f".jpg; done
[ -f "$f" ] &
гарантирует что mv
команда только выполняется на файлах и не каталогах.
find
find . -type f -print0 | xargs -0 -I{} mv "{}" "{}".jpg
-type f
гарантирует, чтобы мы только нашли файлы и никакие каталоги и print0
причины find
распечатать его вывод, разделенный с нулевым символом (\0
) вместо новых строк. Это гарантирует, чтобы мы имели дело правильно с именами файлов, содержащими пробелы или новые строки или другую странность.
xargs
берет список входа и выполняет команду, данную на нем. -0
флаг говорит этому ожидать разделенный от пустого указателя вход и -I{}
заставит его заменить каждый экземпляр {}
с каждой из входных записей (файлы в этом случае) передал.
Я советовал бы использовать программу, названную pyrenamer
.
Открытый это, и в Переименованном шаблоне имени файла, входит {1}.jpg
.
См. 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/' *
Я встречаюсь с этой ситуацией, довольно часто администрирующей системы, особенно при контакте с именами файлов, созданными приложениями Windows. Для добавления .jpg
расширения на именах файлов без любого расширения рассмотрите этот список команд.
find ./example -type f -name '*' -print0 | xargs -0 -I'{}' mv '{}' '{}'.jpg
находка -print0
генерирует Нулевые символы для разделителей, xargs's -0
для принятия тех ПУСТЫХ разделителей. Это также сделает это для любых подкаталогов, так, несомненно, заменит это './example' путь.
rename
большая команда, но это - дистрибутив, конкретный и в реализации и в спецификации. Я обычно использую вещи как rename
на командной строке, но я всегда пишу в GNU utils стандарты для своих сценариев.
Используйте эту команду:
rename 's/$/.jpg/' *