Различные действия с файлами расширениями в Bash скрипте

Содержание
Введение
Показать все файлы
Показать файлы с определённым расширением
Получить только имя файла без расшения
Получить только расширение файла
Преобразовать изображения в формат .webp
Добавить символы к имени файла
Изменить расширение файлов
Похожие статьи

Введение

Перед тем как читать эту статью убедитесь, что вы знакомы с содержанием статьи «Основы Bash»

Показать имена всех файлов в директории

#!/bin/bash for file in ./**; do echo "${file##/}" done

Показать файлы с определёныым расширением

Если нужны только файлы с расширением .jpg

#!/bin/bash for file in ./**.jpg; do echo "${file##/}" done

Получить имя файла без расширения

Если нужно только имя файла без расширения

#!/bin/bash for file in ./**.jpg; do filename="${file%.*}" echo $filename done

Получить только расширение файла

Если нужно только расширение

#!/bin/bash for file in ./**.jpg; do extension="${file##*.}" echo $EXTension done

Преобразовать изображения в формат .webp

Скачать webp

wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.2.0-linux-x86-64.tar.gz
mkdir webp
cp libwebp-1.2.0-linux-x86-64.tar.gz webp/
tar -xvf libwebp-1.2.0-linux-x86-64.tar.gz
cp -r libwebp-1.2.0-linux-x86-64 libwebp-current
cd libwep-current/bin
pwd
vi ~/.bashrc

export PATH=$PATH:/home/andrei/webp/libwebp-current/bin

#!/bin/bash for file in ./**.jpg; do filename="${file%.*}" newfile=$filename".webp" cwebp -q 60 $file -o $newfile done

Добавить к названиям файлов суффикс

Если нужно сохранить расширение файла, а к оригинальному названию добавить какое-то слово или символ. А сделать это со всеми файлами данного типа в директории

Например в директории есть файлы a.jpg , b.jpg , c.jpg , а нужно сделать из них a--small.jpg , b--small.jpg , c--small.jpg

#!/bin/bash POSTFIX="--small" # что вы хотите добавить EXT=".jpg" # к каким файлам for file in ./**$EXT; do fullname="${file##/}" filename="${file%.*}" temp=$filename$POSTFIX mv $file ${temp}$EXT done

А теперь скрипт, который делает и то и другое, а перед тем как делать проверяет нет ли уже такого файла

#!/bin/bash # # After this script is used all .jpg and .png images that did not have # --small. versions will get one # afterwards all .jpg and .png images will get their .webp version # including those --small version that were created by this script # # At the very end each image will have 4 versions: # original # postfixed # original .webp # postfixed .webp POSTFIX="--small" DOT="." for file in ./*; do EXT="${file##*.}" # echo $EXT if [[ $EXT = "jpg" ]] || [[ $EXT = "png" ]]; then # all images will without .webp version fullname="${file##/}" # echo $fullname filename="${file%.*}" # echo $filename webp_file=$filename".webp" if test -f "$webp_file"; then echo "$(date '+%Y-%m-%d %H:%M:%S,%3N')" ____ "\ $webp_file exists" >> image_proc.log else echo "$(date '+%Y-%m-%d %H:%M:%S,%3N')" ____ "\ Converting $file to $webp_file" >> image_proc.log cwebp -q 60 $file -o $webp_file # echo "no webp" fi # do not add postfix to files that already have one existing_postfix="${filename: -7:7}" if [[ $existing_postfix != "--small" ]]; then # check if this file already has prefixed version small_candidate=$filename$POSTFIX$DOT$EXT if test -f "$small_candidate"; then # file with a postfix already exists. # And its .webp version existed or was created # at previous step echo "$(date '+%Y-%m-%d %H:%M:%S,%3N')" ____ "\ $small_candidate already exists.\ No need to add $POSTFIX to $filename" >> image_proc.log else # create new file with prefix echo "$(date '+%Y-%m-%d %H:%M:%S,%3N')" ____ \ "Copy $file to $small_candidate" >> image_proc.log cp $file $small_candidate # check if its .webp version already exists webp_small_candidate=$filename$POSTFIX$DOT"webp" if test -f "$webp_small_candidate"; then echo "$(date '+%Y-%m-%d %H:%M:%S,%3N')" ____ "\ $webp_small_candidate already exists." else echo "$(date '+%Y-%m-%d %H:%M:%S,%3N')" ____ "\ Converting $small_candidate to $webp_small_candidate" >> image_proc.log cwebp -q 60 $small_candidate -o $webp_small_candidate fi fi else # check if this file with postfix has a webp version echo "$(date '+%Y-%m-%d %H:%M:%S,%3N')" ____ "\ $filename :ignored - already has --small postfix" >> image_proc.log fi else echo $(date '+%Y-%m-%d %H:%M:%S,%3N')" ____ "\ $EXT" :ignored as it is not jpg or png" >> image_proc.log fi done

Изменить расширение файлов

Допустим у вас есть картинки JPG и jpg а нужно, чтобы все были jpg

#!/bin/bash for file in ./*; do EXT="${file##*.}" # echo $EXT if [[ $EXT = "JPG" ]]; then # all images will without .webp version fullname="${file##/}" # echo $fullname filename="${file%.*}" # echo $filename jpg_file=$filename".jpg" if test -f "$jpg_file"; then echo "$(date '+%Y-%m-%d %H:%M:%S,%3N')" ____ "\ $jpg_file exists" >> JPG_to_jpg.log else echo "$(date '+%Y-%m-%d %H:%M:%S,%3N')" ____ "\ Converting $file to $jpg_file" >> JPG_to_jpg.log mv $fullname $jpg_file # echo "no webp" fi fi done

Похожие статьи
Bash
Bash Scripting
-eq -gt …: Операторы сравнения
if else: Условные операторы
Цикл while
date: Дата
Переход на новую строку
Арифметические операции
Передать файл или пароль по SFTP в Bash скрипте
Мониторинг потребления памяти
Работа с файлами в директории
Ошибки Bash
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: