🏠 | 💻 IT | Linux | Bash |

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

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

Introduction

Перед тем как читать эту статью убедитесь, что вы знакомы с содержанием статьи «Основы 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

Статьи о Bash
Bash
Bash Scripting
-eq -gt …: Операторы сравнения
if else: Условные операторы
Цикл while
date
Переход на новую строку
Арифметические операции
Передать файл или пароль по SFTP в Bash скрипте
Errors Bash
Share in social media: