Skrypt do backupu określonych plików do wysyłki na FTP

Jest jakiś prosty skrypt pod Linuksa (Raspberry), który pakował by do archiwum (tar.bz2 czy tam rar) wszystkie pliki o rozszerzeniu .srm z kilku katalogów z danej lokalizacji, ale z zachowaniem nazw tych katalogów i ich lokalizacji. Np.
A/katalog b/ xxx.srm
A/katalog c/xxy.srm

Żeby po prostu nie wrzucał tych plików .srm do jednego głównego katalogu, a do katalogów o tej samej nazwie jak jest w oryginale. W katalogach są inne pliki i ich ma nie backupować.

Następnie wysyłałby to archiwum na serwer FTP (logowanie hasło + login).
Żeby skrypt uruchamiał co każdy restart/uruchomienie raspberry i nadpisywał na danym serwerze FTP poprzedni backup lub kasował starsze wersje backupu.

Do spakowania użyj
find twój_katalog -name "*.srm" -o -name "*.html" | tar -cf nazwa_archiwum -T -

Zamiast przesyłania po FTP lepiej prześlij przy pomocy scp z lokalizacji lokalnej na serwer

+ Nadpisywanie bezpośrednio nie jest dobre, bo co jeżeli przerwie się internet? Wtedy stracisz wszystkie kopie. Dodaj w nazwie np. datę dla backupu i po przesłaniu możesz sprawdzić czy jest więcej niż 3 pliki w katalogu backupu, jeżeli tak to usuń najstarszy / pozostaw 2 najmłodsze

Mam po prostu wykupiony hosting www i oddzielne konto FTP na nim pod taki cel. Może trzymać dwie ostatnie kopie. To ma być bardziej na wypadek jakby karta microSD umarła na amen i dobrze żeby to działało bezobsługowo.

cron
Ja sobie zrobiłem automat na darmowy Mega. Oczywiście powalczyłem z uprawnieniami.
Ale cacy

Tak naprawdę to są gotowce, ale nie podasz nam przecież danych

Znalazłem jeden gotowiec, nawet potworzył katalogi na FTP, jednak z automatycznym robieniem backup to nie za bardzo to działa.

Gotowiec, ale musisz zapewne poprzestawiać dane

Mam ten:

skonfigurowane przez rclone config do ftp.
Zedytowałem plik
/opt/retropie/configs/all/runcommand-onstart.sh
(/home/pi/scripts/rclone.sh „down” „$1” „$3”)

/opt/retropie/configs/all/runcommand-onend.sh
( /home/pi/scripts/rclone.sh „up” „$1” „$3”)

Backup generalnie działa, tyle że ręcznie. Aczkolwiek da się to wyklikac z menu retropie bez konieczności robienia tego przez ssh. Automatycznie nie robi backupu z jakiegoś powodu.

Skrypt do którego się odwołują:

cat scriph.sh 
#!/bin/bash

# syncs files via rclone
# usage: rclone.sh "up" "system" "/path/to/rom.ext"

##########################
# start of configuration #
##########################

# path to RCLONE
rclonePath="/home/pi/rclone-v1.39-linux-arm/rclone"

# local base directory for your saves
localPath="/home/pi/RetroPie/saves"

# remote directory for your saves, has to be configured via "rclone config" first
remotePath="retropie:RetroArch"

# set path to log file
logfile="/home/pi/log.txt"

########################
# end of configuration #
########################

# get parameters
direction="$1"
system=""
rom="$3"

# get name of ROM without extension
romfilepath="${rom%/*}"
romfilename="${rom##*/}"
romfilebase="${romfilename%%.*}"
romfileext="${romfilename#*.}"

# escape special characters in ROM name
filter="${romfilebase//\[/\\[}"
filter="${filter//\]/\\]}"

# begin entry in logfile
echo "---------------" >> ${logfile}

# check if local path exists, create if necessary
if [ ! -d "${localPath}/${system}" ]
then
  echo "$(date +%FT%T%z): creating local path \"${localPath}/${system}\"" >> ${logfile}
  mkdir "${localPath}/${system}"
fi

# prepare command for RCLONE
if [ "$direction" == "up" ]
then
        # upload to remote
        cmd="$rclonePath copy ${localPath}/${system} $remotePath/${system} --include \"${filter}.*\" --log-level \"INFO\" --log-file ${logfile}"
elif [ "$direction" == "down" ]
then
        # download from remote
        cmd="$rclonePath copy $remotePath/${system} $localPath/${system} --include \"${filter}.*\" --log-level \"INFO\" --log-file ${logfile}"
else
        # error
        echo "$(date +%FT%T%z): error with first parameter --> \"$1\" is not allowed" >> ${logfile}
        exit 1
fi

# start RCLONE to sync
echo "$(date +%FT%T%z): started sync for ${rom}" >> ${logfile}
echo "$(date +%FT%T%z): starting ${direction}load..." >> ${logfile}
echo "$(date +%FT%T%z): command = $cmd" >> ${logfile}
eval $cmd

# end entry in logfile
echo "$(date +%FT%T%z): finished sync for ${rom}" >> ${logfile}

exit 0

To raczej ciężko zaliczyć jako Apkę, równie dobrze podobny kod można posklejać z pomocą internetu jak się komuś nie chce pisać.

Możesz napisać prosty skrypt w Bash lub Python.