synology.forum архив спільноти · 2005–2022
ai.synology.forum →
ГлавнаяОсновные Вопросы по Продукции › Задача по перемещению файлов

Задача по перемещению файлов

IllAIR · 14.11.2014

Добрый день.

Есть задача заставить Synology перемещать файлы из папки 1 в папку 2 по расписанию.

Суть в том, что есть папка Dropbox\123 в которой находится другая куча папок и файлов. Мне необходимо чтобы Synology перемещал содержимое папку 123 в другую папку хранилища (сохраняя структуру), после чего удалял папку 123 (или ее содержимое) в Dropbox. В случае, если папка уже существует, должно выполняться обновление и перезапись существующих с добавлением новых.

Возможно ли реализовать такое? Файлы не должны быть в архиве чтобы можно было получить к ним доступ.

Спасибо.

glemag · 14.11.2014
Добрый день.

Есть задача заставить Synology перемещать файлы из папки 1 в папку 2 по расписанию.

Суть в том, что есть папка Dropbox\123 в которой находится другая куча папок и файлов. Мне необходимо чтобы Synology перемещал содержимое папку 123 в другую папку хранилища (сохраняя структуру), после чего удалял папку 123 (или ее содержимое) в Dropbox. В случае, если папка уже существует, должно выполняться обновление и перезапись существующих с добавлением новых.

Возможно ли реализовать такое? Файлы не должны быть в архиве чтобы можно было получить к ним доступ.

Спасибо.

 

Подхватываю.

 

У меня так и настроено.

 

На пальцах: Есть папка в Dropbox(назовем ее Work), Dropbox/Work, запускается таск и данная папка архивируется вида work14-11-2014.tar.gz и складывается в отдельную папку на синолоджи(не в папку Dropbox), например volume1/share/backup

 

Через некоторый интервал(у меня день) архивируется новый файлик с датой и тд. При достижении определенного количества архивов - старые удаляются.

 

После успешного бэкапа синолоджи мне сообщает отчет на почту в виде "Dropbox backup done 14/11/2014 13:41 5 files have size 7.6G at /volume1/Dropbox/backup/"

 

P.S. Кому интересно, может почитать нашу дискуссию вот в этой теме

DMagister · 14.11.2014
Возможно ли реализовать такое? Файлы не должны быть в архиве чтобы можно было получить к ним доступ.

по-моему это обычная команда перемещения, т.е. mv -r /volume1/Dropbox\123 /volume2/Dropbox\123\copy

и вставить в планировщик с нужной частотой.

 

хотя разумеется у меня такое подозрение, что Вам что-то другое нужно ;)

glemag · 14.11.2014
по-моему это обычная команда перемещения, т.е. mv -r /volume1/Dropbox\123 /volume2/Dropbox\123\copy

и вставить в планировщик с нужной частотой.

 

хотя разумеется у меня такое подозрение, что Вам что-то другое нужно ;)

 

+++ можно например сделать скрипт, которые будет создавать папку вида Folder_date и складывать по крону например туда.

 

IllAIR · 14.11.2014
по-моему это обычная команда перемещения, т.е. mv -r /volume1/Dropbox\123 /volume2/Dropbox\123\copy

и вставить в планировщик с нужной частотой.

 

хотя разумеется у меня такое подозрение, что Вам что-то другое нужно ;)

Вероятно. Вечером попробую. А подскажите где можно почитать про дополнительные параметры?

glemag · 14.11.2014
Вероятно. Вечером попробую. А подскажите где можно почитать про дополнительные параметры?

 

Попробуйте для начала тут

 

 

 

glemag · 14.11.2014
по-моему это обычная команда перемещения, т.е. mv -r /volume1/Dropbox\123 /volume2/Dropbox\123\copy

и вставить в планировщик с нужной частотой.

 

хотя разумеется у меня такое подозрение, что Вам что-то другое нужно ;)

 

Пойду поковыряю как можно сделать создание новой папки с датой. =)) Самому интересно.

DMagister · 14.11.2014
Пойду поковыряю как можно сделать создание новой папки с датой. =)) Самому интересно.

что-то типа вот такого:

 

#!/bin/sh

today=`date +%F`

mkdir $today

glemag · 14.11.2014
что-то типа вот такого:

 

#!/bin/sh

today=`date +%F`

mkdir $today

 

Да, все это есть. У меня кусок начала для моей архивации начинается так

 

#!/opt/bin/bash

 

#Откуда и куда

echo `date`'----------------------start' >> /opt/var/log/dropbox_run.log

TARGET="/volume1/Dropbox/Work/"

DEST="/volume1/Dropbox/backup/"

TODAY="`date +"%F"`"

 

#Пакуем

echo -e "\033[36m Пакуем \033[0m"

sleep 1

 

tar czf $DEST/Work-$TODAY.tar.gz $TARGET

echo `date`'----------------------end' >> /opt/var/log/dropbox_run.log

 

 

#Удаляем лишнее

echo -e "\033[36m Удаляем лишнее \033[0m"

sleep 1

 

find /volume1/Dropbox/backup/ -type f -name '*.tar.gz' -mtime +10 -exec rm -f {} \;

 

#Проверяем кол-во архивных файлов

files_check=`find /volume1/Dropbox/backup/ -name '*.gz' -type f|wc -l `

glemag · 14.11.2014
Да, все это есть. У меня кусок начала для моей архивации начинается так

 

#!/opt/bin/bash

 

#Откуда и куда

echo `date`'----------------------start' >> /opt/var/log/dropbox_run.log

TARGET="/volume1/Dropbox/Work/"

DEST="/volume1/Dropbox/backup/"

TODAY="`date +"%F"`"

 

#Пакуем

echo -e "\033[36m Пакуем \033[0m"

sleep 1

 

tar czf $DEST/Work-$TODAY.tar.gz $TARGET

echo `date`'----------------------end' >> /opt/var/log/dropbox_run.log

 

 

#Удаляем лишнее

echo -e "\033[36m Удаляем лишнее \033[0m"

sleep 1

 

find /volume1/Dropbox/backup/ -type f -name '*.tar.gz' -mtime +10 -exec rm -f {} \;

 

#Проверяем кол-во архивных файлов

files_check=`find /volume1/Dropbox/backup/ -name '*.gz' -type f|wc -l `

 

В общем у меня все получилось. Оба варианта

 

1. Копирование в локальную папку(замена контента)

2. Создание папки с датой и копирование в нее.

 

 

 

DMagister · 14.11.2014
В общем у меня все получилось. Оба варианта

э-э-э... а могло не получиться ? ;)

glemag · 14.11.2014
э-э-э... а могло не получиться ? ;)

 

Сейчас у автора темы будет вопрос - "Ребята, а где это вообще писать и как???"

 

IllAIR · 14.11.2014
Сейчас у автора темы будет вопрос - "Ребята, а где это вообще писать и как???"

Сейчас не будет - я на работе работу работаю. Будет позже. Stay tuned :)

SergeS · 14.11.2014
Вероятно. Вечером попробую. А подскажите где можно почитать про дополнительные параметры?

 

Перед тем как пробовать - обрати внимание что слэши и бэкслеши как то сильно перемешаны в рекоммендованной тебе строке ;-)

IllAIR · 14.11.2014
по-моему это обычная команда перемещения, т.е. mv -r /volume1/Dropbox\123 /volume2/Dropbox\123\copy

и вставить в планировщик с нужной частотой.

 

хотя разумеется у меня такое подозрение, что Вам что-то другое нужно ;)

Я так и не нашел описания, что дает параметр -r

IllAIR · 14.11.2014
Перед тем как пробовать - обрати внимание что слэши и бэкслеши как то сильно перемешаны в рекоммендованной тебе строке ;-)

Да, спасибо. Я не в ту сторону изначально слэш поставил и мне его же и вставили. Спасибо, что обратили внимание.

glemag · 14.11.2014
Да, спасибо. Я не в ту сторону изначально слэш поставил и мне его же и вставили. Спасибо, что обратили внимание.

 

Каков итог? Удалось получить желаемый результат?

SergeS · 14.11.2014
#!/opt/bin/bash

 

#Откуда и куда

echo `date`'----------------------start' >> /opt/var/log/dropbox_run.log

TARGET="/volume1/Dropbox/Work/"

DEST="/volume1/Dropbox/backup/"

TODAY="`date +"%F"`"

 

<...>

 

Где бы найти хороший хелп вот по этому языку?

И, собственно говоря - главный вопрос, как ЭТО называется :-)? Что собственно говоря искать? :-)))

А то доходит до маразма - мне проще какой-нибудь скриптик для автоматизации типа этого для nasa на php написать, чем вот на этом, даже не знаю на чем...

IllAIR · 14.11.2014
Каков итог? Удалось получить желаемый результат?

Взлетело, но с параметром -f

Параметра -r не существует в mv

Мне помог этот мануал.

Спасибо!

IllAIR · 15.11.2014
Взлетело, но с параметром -f

Параметра -r не существует в mv

Мне помог этот мануал.

Спасибо!

Не долго музыка играла

Сегодня тот же самый скрипт выдает:

MrPink> mv -f /volume1/Dropbox/IFTTT /volume1/IFTTT  
mv: can't rename '/volume1/Dropbox/IFTTT': Directory not empty

glemag · 17.11.2014
Не долго музыка играла

Сегодня тот же самый скрипт выдает:

MrPink> mv -f /volume1/Dropbox/IFTTT /volume1/IFTTT  
mv: can't rename '/volume1/Dropbox/IFTTT': Directory not empty

 

Попробуйте сделать перезапись через cp

IllAIR · 17.11.2014
Попробуйте сделать перезапись через cp

Хочу попробовать

cp -rf volume1/Dropbox/IFTTT /volume1/IFTTT

Но мне нужно будет удалить потом каталог volume1/Dropbox/IFTTT Я так понимаю, что мне нужен rm

rm -rf volume1/Dropbox/IFTTT

Так вот у меня вопрос: если я напишу:

cp -rf volume1/Dropbox/IFTTT /volume1/IFTTT
rm -rf volume1/Dropbox/IFTTT

в таске - то получается, что он должен будет дождаться полного выполнения команды cp и только потом выполнит rm или выполнит сразу?

mv конечно было бы удобнее использовать.

 

mv оказывается не умеет merge поэтому только cp & rm, только ультрахардкор.

DMagister · 17.11.2014
cp -rf volume1/Dropbox/IFTTT /volume1/IFTTT
rm -rf volume1/Dropbox/IFTTT

в таске - то получается, что он должен будет дождаться полного выполнения команды cp и только потом выполнит rm или выполнит сразу?

если у Вас в скрипте две команды подряд, то вторая выполнится после завершения первой. правда если первая выполнится с ошибками, то вторая выполнится все равно.

если написать вот так, то вторая команда должна выполняться только после успешного завершения предыдущей

cp -rf volume1/Dropbox/IFTTT /volume1/IFTTT && rm -rf volume1/Dropbox/IFTTT

 

только обратите внимание на то, что у Вас не везде указан абсолютный путь, т.е. написано volume1 , а не /volume1 , что означает, что Вы указываете путь от текущего каталога, а не от корня.

glemag · 17.11.2014
Хочу попробовать

cp -rf volume1/Dropbox/IFTTT /volume1/IFTTT

Но мне нужно будет удалить потом каталог volume1/Dropbox/IFTTT Я так понимаю, что мне нужен rm

rm -rf volume1/Dropbox/IFTTT

Так вот у меня вопрос: если я напишу:

cp -rf volume1/Dropbox/IFTTT /volume1/IFTTT
rm -rf volume1/Dropbox/IFTTT

в таске - то получается, что он должен будет дождаться полного выполнения команды cp и только потом выполнит rm или выполнит сразу?

mv конечно было бы удобнее использовать.

 

mv оказывается не умеет merge поэтому только cp & rm, только ультрахардкор.

 

Если я правильно понимаю вам нужно по расписанию делать рекурсивную копию папки с заменой содержимого

 

cp -r volume1/Dropbox/IFTTT /volume1/IFTTT

 

Так будет работать. Вопрос - зачем флаг f?

 

IllAIR · 17.11.2014
Если я правильно понимаю вам нужно по расписанию делать рекурсивную копию папки с заменой содержимого

 

cp -r volume1/Dropbox/IFTTT /volume1/IFTTT

 

Так будет работать. Вопрос - зачем флаг f?

Мне не с заменой содержимого, а с добавлением. Чтобы то, что есть в папке не затиралось.

Wiki говорит -f (force) — разрешает удаление целевого файла, в который производится копирование, если он не может быть открыт для записи.

Возможно вы правы и это не нужно.

А что с порядком выполнения команд? Копирование же в отличии от mv не может выполняться мгновенно. Не произойдем удаление каталога пока он еще не до конца откопирован?

Не хочется разносить это на 2 таска потому как я не знаю сколько займет копирование, да и возможна ситуация изменения папки во время между копированием и удалением.

 

Ключ -n, --no-clobber — не перезаписывать существующий файл (отменяет предыдущий параметр -i). я так понимаю позволит не перезаписывать имеющиеся файлы - это по идее должно ускорить копирование. но вот как он будет обрабатывать папки - допустим если он встретит уже имеющуюся папку и положит ли он в нее новые файлы или нет?