Перемещение файлов со структурой папок по возрасту на другой диск

У меня есть папка с именем Research (которая также включает в себя подпапки).

Я хочу регулярно перемещать файлы из Research старше 6 месяцев в другую папку с именем Research_Archive, которая находится на другом диске. Файлы> 6 месяцев будут удалены из Research.
Папка Research_Archive будет воспроизводить структуру подпапок из Research.

Сценарий будет запускаться периодически, поэтому Research_Archive будет обновляться.

Я видел сценарий, подобный следующему:

find . -type f -mtime +5 -print0 | while IFS= read -r -d '' file; do
    dir="${file%/*}"
    mkdir -p ../rootarchive/"$dir"
    mv "$file" ../rootarchive/"$file"
done

Но как новичок в сценарии, я полностью смущен его относительными путями. Например, мой исходный путь: /home/me/Documents/Research/, а пункт назначения будет: /media/me/drive21/Documents/Research_Archive/.

И я не уверен, что если запустить вышеупомянутый скрипт более одного раза, заново создаст папку Research_Archive. И как будут установлены разрешения для папки Research_Archive (когда я пытался протестировать, я был заблокирован от просмотра менеджера файлов просмотра созданной папки).

Любая помощь / конкретные примеры будут оценены.

2
задан 12 September 2017 в 23:21

1 ответ

Этот сценарий должен помочь в этом, расценивает:

#!/bin/bash

from=$1
destination=$2
if [[ -d "$from" && -s "$from" ]]; then

        # extract the name of the sub directory
        # to be create
        src=$(sed -r 's/.*\/(Research).*/\1/' <<< "$from")

        if [[ -d /media/me/drive21/Documents/Research_Archive/ ]]; then

                destination=/media/me/drive21/Documents/Research_Archive/

                if [[ ! -d "$destination/$src" ]]; then                       

                        mkdir "$destination/$src"
                        newdes="$destination/$src"
                        find "$from" -type f -mtime +5 -print0 -exec mv {} "$newdes" \;
                else
                        cd "$destination"
                        find "$from" -type f -mtime +5 -print0 -exec mv {} "$newdes" \;

                fi

         else
                exit 1
         fi
else
        exit 1
fi

Использование:

chmod +x mv.sh
./mv.sh /home/me/Documents/Research/  /media/me/drive21/Documents/Research_Archive

Используя a udev правило автоматизировать перемещение файлов к внешнему устройству хранения данных:

  1. Измените код для работы с этой установкой:
    #!/bin/bash

    from=$1
    destination=$2
    if [[ -d "$from" && -s "$from" ]]; then

            # extract the name of the sub directory
            # to be create
            src=$(sed -r 's/.*\/(arch).*/\1/' <<< "$from")

            if [[ -d "/media/me/drive21/Documents/Research_Archive/" ]];then


                 destination="/media/me/drive21/Documents/Research_Archive/"

                    if [[ ! -d "$destination/$src" ]]; then

                            cd "$destination"
                            mkdir "$src"

                            find "$from" -type f -mtime -5 -exec mv {} "$src" \;
                    else
                            cd "$destination"
                            find "$from" -type f -mtime -5 -exec mv {} "$src" \;

                    fi

            else
                    exit 1
            fi
    else
            exit 1
    fi
  1. Настроенный монтируют событие устройства:

    • Создайте a .rule файл:

      KERNEL=="sd*", SUBSYSTEM=="block", ATTR{removable}=="1", ATTRS{serial}=="07083395757D2761", MODE="0777", RUN+="/home/me/mv.sh /home/me/Documents/Research/ /media/me/drive21/Documents/Research_Archive"
      
    • назовите это 90-move.rules и место в /etc/udev/rules.d каталог

    • Использовать udevadm info -a -n /dev/sd* получить необходимую информацию о Вашем внешнем устройстве хранения.

      enter image description here

  2. Теперь вся потребность делает плагин Ваше устройство и после того как это определяется rule набор, файлы должны быть перемещены. Настройте код к способу, которым он будет работать лучше всего на Вас.

Источник:

http://www.reactivated.net/writing_udev_rules.html

https://docs.oracle.com/cd/E37670_01/E41138/html/ch07s03.html

https://wiki.debian.org/udev

https://www.linux.com/news/udev-introduction-device-management-modern-linux-system

2
ответ дан 12 September 2017 в 23:21

Другие вопросы по тегам:

Похожие вопросы: