Как переименовать скриншоты в Linux
Многие настольные системы Linux сохраняют снимки экрана с такими именами, как Screenshot from 2020-11-29 18-57-51.png
. Часто вам действительно нужно было переименовать файлы во что-то более очевидное, например webinar1.png
, webinar2.png
и т. д. К счастью, переименовать кучу файлов очень легко в командной строке Linux.
Оболочка Bash очень универсальна и предоставляет различные способы оценки значений и раскрытия переменных. Одной из точных оценок является арифметическая оценка. Чтобы выполнить эту оценку, оберните свой арифметический оператор с помощью $ ((
и ))
.
Оценка также может включать раскрытие переменных, например $sum
, для преобразования в значение. Но для удобства любые переменные Bash, перечисленные между $ ((
и ))
, раскрываются автоматически. Например, чтобы увеличить количество переменных на 1, вы можете ввести:
count=$(( count + 1 ))
Это то же самое, что набрать:
count=$(( $count + 1 ))
Арифметическое расширение поддерживает те же операторы, что и в других языках программирования, включая +
и -
для сложения и вычитания, *
и /
для умножения и деления и %
для остатка. Вы также можете использовать ++
и --
для увеличения и уменьшения значения переменной. Проверьте справочную страницу для Bash и прокрутите вниз до АРИФМЕТИЧЕСКАЯ ОЦЕНКА, чтобы увидеть полный список поддерживаемых операторов и их приоритет.
Чтобы переименовать все мои скриншоты, мне нужно было написать эту однострочную команду Bash:
n=1; for f in Screenshot*.png; do mv -v "$f" webinar$n.png; n=$(( n + 1 )); done
Но что это делает?
Первая часть команды, n=1
, инициализирует переменную n
значением 1.
Затем я использую цикл for
для работы со всеми файлами, которые начинаются с Screenshot
и заканчиваются расширением .png
. Обычно это все скриншоты, которые я сделал во время моего последнего вебинара. Если бы мне нужно было быть более точным, я мог бы включить дату в спецификацию этого файла, например Снимок экрана от 2020-11-29*.png
. Обратная косая черта — это буквально экранирование для сохранения пробелов в имени файла.
Каждая итерация цикла for сохраняет имя файла в переменной f. Таким образом, команда mv
mv -v \$f\ webinar$n.png
переименовывает каждый файл в мои предпочтительные имена файлов, такие как webinar1.png
, webinar2.png
и т. д. Мне нужны кавычки вокруг расширения переменной $f
, чтобы пробелы в Скриншоте из ГГГГ-ММ-ДД чч-мм-сс.png
не вызывали проблем в моем mv
. Если вы получаете сообщение об ошибке типа mv: target webinar1.png не является каталогом
, возможно, вы не заключили в кавычки $f
.
Наконец, я увеличиваю значение переменной n
, чтобы оно было готово к следующей итерации цикла. Арифметическое расширение n=$ (( n + 1 ))
увеличивает переменную n
на 1.