Atsisiuntimų aplanko organizatorius: tvarkinga failų sistema vienu paspaudimu

Ar kada nors jautėtės pasimetę Atsisiuntimų aplanko chaose? Daugelyje iš mūsų kompiuterių šis aplankas tampa laikina saugykla įvairiems failams, nuo dokumentų ir muzikos iki vaizdų ir archyvų. Šiandien pristatau paprastą, bet galingą įrankį, kuris padės suvaldyti šią netvarką ir sutaupyti jūsų laiką.

Kas tai yra?

Tai Bash scenarijus, pavadintas Atsisiuntimų aplanko organizatorius. Jis automatiškai rūšiuoja failus iš Atsisiuntimų aplanko į atitinkamus katalogus pagal jų tipą. Pradžioje, šį scenarijų pasidariau, kad iškeltų .md failus į Obsidian notes, bet vėliau supratęs, kaip tai patogu, patobulinau scenarijų ir dabar surūšiuoja daugybę kitų failų tipų, dažnai sutinkamų Atsisiuntimų aplanke.

Kaip jis veikia?

Scenarijus pirmiausia patikrina, ar Atsisiuntimų aplanke yra .md failų. Jei taip, jis perkelia juos į Obsidian/notes katalogą. Tada jis iškviečia move_files funkciją, kuri apdoroja kitų tipų failus.

move_files funkcija gauna sąrašą plėtinių ir paskirties katalogo kaip argumentus. Ji patikrina, ar yra atitinkamų failų Atsisiuntimų aplanke, ir, jei taip, perkelia juos į paskirties katalogą.

Palaikomi failų tipai:

  • Dokumentai: pdf, doc, docx, epub, txt
  • Muzika: mp3
  • Vaizdo įrašai: avi, mpeg, mp4, mkv
  • Vaizdai: jpg, jpeg, png, gif, webp, svg
  • Archyvai: zip, tar, gzip, bzip2, xz, 7z

#!/bin/bash
 
src_dir="$HOME/Atsiuntimai/"
dst_dir="$HOME/Obsidian/notes/"
docs_dir="$HOME/Dokumentai/"
music_dir="$HOME/Muzika/"
video_dir="$HOME/Video/"
images_dir="$HOME/Paveikslėliai/"
zip_dir="$HOME/Archyvuoti/"
 
if ! ls "$src_dir"/*.md >/dev/null 2>&1; then
  echo "Nėra .md failų Atsisiuntimų kataloge"
else
  for file in "$src_dir"*.md; do
    filename="${file%%.*}"
    dst_file="${dst_dir}$(basename "$filename").md"
    if [ -f "$dst_file" ]; then
      echo "Failas $file jau egzistuoja kataloge $dst_dir"
    else
      mv "$file" "$dst_file"
      echo "Perkeltas failas $file į katalogą $dst_dir"
    fi
  done
fi
 
move_files() {
  local extensions=("$@")
  local target_dir="${extensions[-1]}"
  unset 'extensions[${#extensions[@]}-1]'
 
  for ext in "${extensions[@]}"; do
    shopt -s nullglob
    files=("$src_dir"/*.$ext)
    shopt -u nullglob
    if [ ${#files[@]} -eq 0 ]; then
      echo "Nėra .$ext failų Atsisiuntimų kataloge"
    else
      for file in "${files[@]}"; do
        if [ -f "$file" ]; then
          mv "$file" "$target_dir"
          echo "Perkeltas failas $file į katalogą $target_dir"
        fi
      done
    fi
  done
}
 
 
 
move_files "pdf" "doc" "docx" "epub" "txt" "$docs_dir"
move_files "mp3" "$music_dir"
move_files "avi" "mpeg" "mp4" "mkv" "$video_dir"
move_files "jpg" "jpeg" "png" "gif" "webp" "svg" "$images_dir"
move_files "zip" "tar" "gzip" "bzip2" "xz" "7z" "$zip_dir"

Komentarai

Populiarūs šio tinklaraščio įrašai

Configuring a NixOS firewall for everyday use

Setting up syncthing as a service on openSUSE and other Linux distributions

Monitoring SFTP server updates with Python