среда, 28 августа 2024 г.

Автоматизация действий с файлами при использовании Syncthing

При использовании Syncthing можно организовать автоматическое раскладывание полученных файлов/папок из папки обмена в нужные папки. Операция производится через запуск скрипта sh, выполняемого по расписанию.

Подсчитывается количество файлов в папке источника $source (путь к папке задаётся в переменных скрипта, например, source=/home/minter/Документы/Exchange). Подсчёт производится без учёта вложенных папок папки источника, то есть из него исключаются папки .stfolder и .stversions. Также из подсчёта исключаются файлы, загрузка которых ещё не завершена и которые будут иметь расширение .tmp  Если результат подсчёта равен 0, то ничего не предпринимается. В противном случае выполняются какие-то действия.

#!/bin/bash
count=`find $source -maxdepth 1 -type f ! -name "*.tmp" | wc -l`
if [ $count -eq 0 ]; then
    :
  else
    перечисление действий или выполняемые скрипты sh
fi
exit

Например, перенести файлы jpg и mp4 в нужные папки $dest1 или $dest2. Подсчёт нужных файлов производится по их расширениям:

Для файлов jpg:

cjpg=`find $source -maxdepth 1 -name "*.jpg" | wc -l`
if [ $cjpg -eq 0 ]; then
      :
  else
      mv $source/*.jpg $dest1
fi

Для файлов mp4:

cmp4=`find $source -maxdepth 1 -name "*.mp4" | wc -l`
if [ $cmp4 -eq 0 ]; then
      :
  else
      mv $source/*.mp4 $dest2
fi 

Для переноса папок вопрос усложняется, так как необходимо учесть множество условий. Задача становится более простой, если передаваемая папка будет упакована в какой-либо архив: tar, zip. 7z  Если при подсчёте файлов будут найдены файлы с расширениями tar, zip, 7z, то будет запущена задача извлечения данных из таких архивов в папку назначения (например, $dest), а исходные файлы могут быть либо удалены начисто, либо перемещены в Корзину. Примеры ниже.

Файлы архивов tar

ctar=`find $source -name "*.tar" | wc -l`
if [ $ctar -eq 0 ]; then
    :
  else
    for package in $dest/*.tar;
    do
    tar -xf "$package" -C $dest
    done
    # указать одно из двух
    rm $source/*.tar  # удалить начисто
    gio trash $source/*.tar  # удалить в Корзину
fi

Файлы архивов tar.gz

ctargz=`find $source -name "*.tar.gz" | wc -l`
if [ $ctargz -eq 0 ]; then
    :
  else
    for package in $dest/*.tar.gz;
    do
    tar -xzf "$package" -C $dest
    done
    # указать одно из двух
    rm $source/*.tar.gz  # удалить начисто
    gio trash $source/*.tar.gz  # удалить в Корзину
fi

Файлы архивов zip

czip=`find $dest -name "*.zip" | wc -l`
if [ $czip -eq 0 ]; then
    :
  else
   for package in $dest/*.zip;
   do
   unzip -d $dest "$package"
   done
    # указать одно из двух
    rm $source/*.zip  # удалить начисто
    gio trash $source/*.zip  # удалить в Корзину
fi

Файлы архивов 7z

c7zsp=`find $source -name "*.7z" | wc -l`

if [ $c7z -eq 0 ];
  then
    :
  else
    for package in $source/*.7z;
    do
    7z x "$package" -o$dest
    done
    # указать одно из двух
    rm $source/*.7z  # удалить начисто
    gio trash $source/*.7z  # удалить в Корзину
fi

Если архивы 7z закрыты паролем, данный пароль не меняется и применяется постоянно, то команда распаковки будет иметь вид:

7z x -pпароль "$package" -o$dest

Такие архивы можно помечать дополнительной буквой, например s, добавляемой к концу имени файла. Тогда вместо *.7z нужно будет указать *s.7z

Комментариев нет:

Отправить комментарий