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

У меня есть папка с именем 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

2 ответа

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

#!/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

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

Измените код для работы с этой установкой: #!/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 Измените код для работы с этой настройкой: Теперь все, что вам нужно сделать, это подключить ваше устройство и как только он идентифицируется набором rule, файлы должны быть перемещены. Пожалуйста, настройте код так, как он будет работать лучше всего для вас.

Источник:

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

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

https://wiki.debian.org/udev

https://wiki.debian.org/udev [ ! d27]

2
ответ дан 18 July 2018 в 06:59

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

#!/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

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

Измените код для работы с этой установкой: #!/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 Измените код для работы с этой настройкой: Теперь все, что вам нужно сделать, это подключить ваше устройство и как только он идентифицируется набором rule, файлы должны быть перемещены. Пожалуйста, настройте код так, как он будет работать лучше всего для вас.

Источник:

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

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

https://wiki.debian.org/udev

https://wiki.debian.org/udev [ ! d27]

2
ответ дан 24 July 2018 в 18:43
  • 1
    Благодарю. Перемещали файлы в порядке. Но не воссоздал подпапки исследования в Research_Archive. Он просто переместил файлы в основную папку. – snowcrash101 12 September 2017 в 19:26
  • 2
    Кроме того, как я могу назвать этот скрипт, если вы хотите автоматизировать при загрузке или запустить как cron? благодаря – snowcrash101 12 September 2017 в 19:36
  • 3
    Спасибо за работу над этим. Но при тестировании обновленного скрипта с использованием ./mv.sh / home / me / Documents / Research / / media / me / drive21 / Documents / Research_Archive, он по-прежнему не создает подпапку Research in Research_Archive. Он по-прежнему перемещает все файлы в основной папке Research_Archive, которая теперь находится в ряде других папок: home / me / Documents /.../ Research_Archive – snowcrash101 13 September 2017 в 18:24
  • 4
    Это с настройкой run at boot? – George Udosen 13 September 2017 в 18:28
  • 5
    Нет, просто запустил команду /mv.sh ... в терминале – snowcrash101 13 September 2017 в 20:02

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

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