Small collection of Bash scripts to launch functionalities in folders when new files appear, such as optimizing videos, converting images or battery management.
Go to file
Andros Fenollosa 3dcce1b0d3 Add script
2023-05-05 14:52:26 +02:00
assets Update social 2023-05-02 16:03:10 +02:00
bash-folders-battery-hook.sh Update bash script 2023-05-03 19:42:05 +02:00
bash-folders-image-to-webp.sh Add script 2023-05-05 14:52:26 +02:00
bash-folders-video-optimizer.sh Remove native notification 2023-05-02 16:18:26 +02:00
LICENSE Initial commit 2023-03-21 19:06:21 +01:00
README.md Update README.md 2023-05-05 13:36:26 +02:00

Bash folders

Bash folder brand

Collection of Bash scripts to execute functionalities in folders, such as:

  • Video optimizer: Folder that watches when new videos are added and optimizes them.
  • Battery hook: Folder with custom scripts to be launched in different battery states.
  • Image to webp: Folder that watches when new image (PNG or JPEG) are added and transform to WebP format.

Video optimizer

Folder that watches when new videos are added and optimizes them.

Requirements

  • ffmpeg

Example in Debian.

sudo apt install ffmpeg

Install

curl -o bash-folders-video-optimizer https://raw.githubusercontent.com/tanrax/bash-folders/main/bash-folders-video-optimizer.sh && chmod +x bash-folders-video-optimizer && sudo rm -f /usr/local/bin/bash-folders-video-optimizer && sudo mv bash-folders-video-optimizer /usr/local/bin && echo "🎉 Successfully installed! 🎉"

Test

bash-folders-video-optimizer --help

Run

bash-folders-video-optimizer --folder [folder to watch]

Example.

mkdir optimizer
bash-folders-video-optimizer --folder optimizer

And leave a video that you want to optimize in the folder optimizer.

Start at operating system startup

Option 1: Service

Create a file in /etc/systemd/system/bash-folders-video-optimizer.service with the following content.

[Unit]
Description=Folder that watches when new videos are added and optimizes them.

[Service]
Restart=always
RestartSec=5
User=[user]
ExecStart=bash-folders-video-optimizer --folder [folder to watch]

[Install]
WantedBy=multi-user.target

Edit it to your needs.

Recharge services.

sudo systemctl daemon-reload

And activate it.

sudo systemctl enable bash-folders-video-optimizer
sudo systemctl start bash-folders-video-optimizer

Option 2: Cron

Open.

crontab -e

Add to document.

@reboot bash-folders-video-optimizer --folder [folder to watch] >/dev/null 2>&1 &

Battery hook

Folder with custom scripts to be launched in different battery states.

The filename of the scripts, or your custom scripts, must be:

  • discharging: When the battery is in use.
  • charging: When the battery is charging.
  • low: When it reaches the low percentage. Default 15.
  • high: When it reaches the high percentage. Default 85.
  • full: When the battery is full.

They must have execution permissions. If any of them do not exist, they will be ignored.

Install

curl -o bash-folders-battery-hook https://raw.githubusercontent.com/tanrax/bash-folders/main/bash-folders-battery-hook.sh && chmod +x bash-folders-battery-hook && sudo rm -f /usr/local/bin/bash-folders-battery-hook && sudo mv bash-folders-battery-hook /usr/local/bin && echo "🎉 Successfully installed! 🎉"

Test

bash-folders-battery-hook --help

Run

bash-folders-battery-hook --folder [folder path]

Example.

mkdir battery-scripts

bash-folders-battery-hook --folder battery-scripts

Inside the folder all the empty scripts will be created, which you will have to edit to include the instructions in Bash.

Start at operating system startup

Option 1: Service

Create a file in /etc/systemd/system/bash-folders-battery-hook.service with the following content.

[Unit]
Description=Folder with custom scripts to be launched in different battery states.

[Service]
Restart=always
RestartSec=5
User=[user]
ExecStart=bash-folders-battery-hook --folder [folder path]

[Install]
WantedBy=multi-user.target

Edit it to your needs.

Now you will need the script to run every so often to check the battery status. The best solution is to create a timer.

Create a file in /etc/systemd/system/bash-folders-battery-hook.timer with the following content.

[Unit]
Description=Folder with custom scripts to be launched in different battery states every minute.

[Timer]
OnCalendar=*-*-* *:*:00
Persistent=true

[Install]
WantedBy=timers.target

Recharge services.

sudo systemctl daemon-reload

And activate it.

sudo systemctl enable bash-folders-battery-hook.timer
sudo systemctl start bash-folders-battery-hook.timer

Option 2: Cron

Open.

crontab -e

Add to document.

* * * * * bash-folders-battery-hook --folder [folder path]

Image to WebP

Folder that watches when new image (PNG or JPEG) are added and transform to WebP format.

Requirements

  • webp

Example in Debian.

sudo apt install webp

Install

curl -o bash-folders-image-to-webp https://raw.githubusercontent.com/tanrax/bash-folders/main/bash-folders-image-to-webp.sh && chmod +x bash-folders-image-to-webp && sudo rm -f /usr/local/bin/bash-folders-image-to-webp && sudo mv bash-folders-image-to-webp /usr/local/bin && echo "🎉 Successfully installed! 🎉"

Test

bash-folders-image-to-webp --help

Run

bash-folders-image-to-webp --folder [folder to watch]

Example.

mkdir image-to-webp-converter
bash-folders-image-to-webp --folder image-to-webp-converter

And leave a image that you want to optimize in the folder image-to-webp-converter.

Start at operating system startup

Option 1: Service

Create a file in /etc/systemd/system/bash-folders-image-to-webp.service with the following content.

[Unit]
Description=Folder that watches when new image (PNG or JPEG) are added and transform to WebP format.

[Service]
Restart=always
RestartSec=5
User=[user]
ExecStart=bash-folders-image-to-webp --folder [folder to watch]

[Install]
WantedBy=multi-user.target

Edit it to your needs.

Recharge services.

sudo systemctl daemon-reload

And activate it.

sudo systemctl enable bash-folders-image-to-webp
sudo systemctl start bash-folders-image-to-webp

Option 2: Cron

Open.

crontab -e

Add to document.

@reboot bash-folders-image-to-webp --folder [folder to watch] >/dev/null 2>&1 &

Development

Check syntax

shellcheck [script]