Что вы хотите - это libwnck (если вас просто интересуют окна) или libbamf (если вас интересуют окна и приложения, которые им принадлежат).
Если у вас более сложная иерархия, вам потребуется немного более сложный подход. Вы можете использовать опцию bash globstar, которая позволяет ** сопоставлять ноль или более каталогов и подкаталогов, или вы можете использовать find.
globstarshopt -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 может использовать perl expresions .. ваш лучший друг
На первой строке вы ввели каталог ваших файлов
cd /path/to/exported/imgs/folder/
s перед выражением указывает на замещение
rename 's/(\w+)$/$1\.jpg/' *Затем будет искать любой файл с буквенно-цифровым и подчёркнутым именем, но без расширения
rename 's/(\w+)$/$1\.jpg/' *И заменить добавьте к нему. dot jpg
rename 's/(\w+)$/$1\.jpg/' *Наконец, применитесь к любому файлу в папке первой строки
rename 's/(\w+)$/$1\.jpg/' *Я часто сталкиваюсь с этой ситуацией с системами администрирования, особенно при работе с именами файлов, созданных приложениями Windows. Чтобы добавить .jpg расширения в именах файлов без какого-либо расширения, рассмотрите этот список команд.
find ./example -type f -name '*' -print0 | xargs -0 -I'{}' mv '{}' '{}'.jpg
find -print0 генерирует NULL-символы для разделителей, xargs -0 предназначен для принятия этих разделителей NULL. Это также сделает это для любых подкаталогов, поэтому обязательно замените этот путь ./example.
rename - отличная команда, но она специфична для дистрибутива как в реализации, так и в спецификации. Обычно я использую такие вещи, как rename в командной строке, но я всегда пишу в стандартах GNU utils для своих скриптов.