Форум программистов, компьютерный форум, киберфорум
Наши страницы
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
poloten4ik94
6 / 6 / 1
Регистрация: 01.12.2011
Сообщений: 107
1

Перемещение из smb на ftp

12.08.2019, 13:46. Просмотров 302. Ответов 9
Метки нет (Все метки)

Имеется файловый сервер: 192.168.1.5 с шарой smb1, в которую будут помещаться файлы.
Вход по логину и паролю. (smblog1 - smbpwd1)

Имеется ftp server с папкой ftp1. 192.168.1.6
Вход так же с логином и паролем (ftplog1 - ftppwd1)


Так же имеется linux сервер на котором необходимо написать bash скрипт, который должен:
1. Перемещать из \\192.168.1.5\smb1 документы на ftp://192.168.1.6/ftp1 (скорее всего будут архивы в формате zip)
2. Так же имеется папка \\192.168.1.5\smb1\spool\ в которую должны попадать перемещаемые файла и очищаться оттуда через 3 дня (своеобразный бекап)

Добавлено через 1 час 18 минут
Перелопатив гугл примерно понимаю логику, но пока получается только каша.

1. Необходимо объявить переменные

SMB_SERVICE="\\\\192.168.1.5";
SMB_ROOT="\\smb1";
SPOOL_DIR="\\smb1\spool";
SMB_USER="smblog1";
SMB_PASS="smbpwd1";


HOST=192.168.1.1;
USER=ftplog1;
PASS=ftppwd1;
FTP_DIR="\\ftp1";


Далее уже, что то

$SMB_ROOT mv FTP_DIR $SPOOL_DIR --no-progress --recursive --exclude "*" --include "*.zip"


Ну конечно, же это всё не завелось. Подскажите, в каком направлении двигаться?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2019, 13:46
Ответы с готовыми решениями:

smb/ftp: Mac и XP
Есть у меня сеть: 2 pc и mac. На одном pc - windows xp, на другом windows 7. с мака по smb...

Поиск файлов по локальной сети (FTP SMB)
Существуют ли примеры реализации вышеописанной задачи на ASP? Заранее благодарен...

Перемещение страниц по ftp
Здравствуйте. Редактировал сайт в дримере. Переместил страницу по фтп в др каталог. Почему то...

Перемещение папки на Ftp сервер
Возможно ли как то на LotusScript перекинуть папку из определённого места на ФТП?

Перемещение файлов внутри FTP сервер
Добрый день. Приобрел роутер с возможностью подключения жесткого диска и организации на нем FTP...

9
bidstrup
302 / 123 / 18
Регистрация: 11.03.2018
Сообщений: 567
12.08.2019, 15:27 2
Если есть админский доступ на Linux, то установить на нём powershell, забыть про bash
и почувствовать облегчение от нахождения в единой операционной среде.
0
poloten4ik94
6 / 6 / 1
Регистрация: 01.12.2011
Сообщений: 107
12.08.2019, 15:39  [ТС] 3
Цитата Сообщение от bidstrup Посмотреть сообщение
Если есть админский доступ на Linux, то установить на нём powershell, забыть про bash
и почувствовать облегчение от нахождения в единой операционной среде.
К сожалению вариантов нет, нужно именно через bash, так как эта linux машина с помощью крона крутит десятками скриптов.
Пока менять методы времени и возможности нет.
0
bidstrup
302 / 123 / 18
Регистрация: 11.03.2018
Сообщений: 567
12.08.2019, 15:44 4
так никто у тебя bash не отнимает, пусть себе крутит то, что уже крутит,
но надо смотреть в будущее.
0
12.08.2019, 15:44
Kukstyler
Mayorista nolimpiopescado
868 / 575 / 187
Регистрация: 02.04.2009
Сообщений: 2,486
13.08.2019, 22:47 5
Цитата Сообщение от bidstrup Посмотреть сообщение
на Linux, то установить на нём powershell
для чего?
0
bidstrup
302 / 123 / 18
Регистрация: 11.03.2018
Сообщений: 567
14.08.2019, 01:31 6
a) Themenstarter не знает bash.
b) Themenstarter имеет дело с разными платформами.
c) pwsh - самый удобный на тек. момент кросс-платформенный shell с серьёзнейшим потенциалом ( технология dotnet ).
d) Инвестиции своих мозговых усилий в pwsh выглядят на этом фоне вполне привлекательно.
0
Kukstyler
Mayorista nolimpiopescado
868 / 575 / 187
Регистрация: 02.04.2009
Сообщений: 2,486
14.08.2019, 10:51 7
Цитата Сообщение от bidstrup Посмотреть сообщение
Themenstarter не знает bash
Ну так как раз пусть узнаёт, если уж данным делом (IT) решил заниматься. К тому же, откуда Вы знаете, что ознает PowerShell?

Цитата Сообщение от bidstrup Посмотреть сообщение
Themenstarter имеет дело с разными платформами
И? Причём тут PowerShell? Без него никак, раз мульти-платформа?

Цитата Сообщение от bidstrup Посмотреть сообщение
технология dotnet
.NET в Никсах... Квалифицируется Никсовиками как полное извращение (с чем лично я, по большому счёту, согласен ).

Цитата Сообщение от bidstrup Посмотреть сообщение
Инвестиции своих мозговых усилий в pwsh выглядят на этом фоне вполне привлекательно
Я не против изучения PowerShell-а. Но оно должно быть к месту. В эпоху когда МС начали внедрятся в мир Никсов, акцентироваться или тем-более изучать PowerShell для использования в Никсах, ИМХО, по меньшей мере нецелесообразно.

poloten4ik94, опишите чётко этапы, которые Вы хотите реализовать (испходя из того, прочитанного).
0
poloten4ik94
6 / 6 / 1
Регистрация: 01.12.2011
Сообщений: 107
14.08.2019, 12:50  [ТС] 8
Цитата Сообщение от Kukstyler Посмотреть сообщение
poloten4ik94, опишите чётко этапы, которые Вы хотите реализовать (испходя из того, прочитанного).
Необходимо автоматически перебрасывать zip файлы из шары smb на сторонний ftp с помощью bash. Предварительно файлы нужно закидывать в spool, где они будут храниться тройку дней. Далее он очищается.

Старый админ уже писал аналогичный скрипт, но из smb на ftp.(наоборот)

Скрипт выглядит данным образом и работает успешно:

Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/bash
 
# CONFIGURATION
#--------------
LOG_FILE="/var/log/scripts/ftp2switch.log";
 
# WARNING TRAILING SLASH MANDATORY
FTP_ROOT="/mnt/md0/ftp/";
SMB_SERVICE="\\\\192.168.1.50\\share\\";
SMB_ROOT="\\_folder\\_folder\\";
 
SMB_USER="login";
SMB_PASS="pass";
 
PRE_RM_DIR="/mnt/md0/spool/ftp/";
RM_DAYS=3;
 
DEBUG=0
LOG_FILE="/var/log/scripts/ftp2switch.log";
 
USAGE="USAGE: ftp2switch.sh <ftp_project> <switch_project>"
#--------------
 
echo `date` "ftp2switch - start" >> $LOG_FILE;
 
# Test 1st parameter: ftp directory
if [[ -z "$1" ]] || [[ ! -d "$FTP_ROOT$1/" ]];
then
        ls -l $FTP_ROOT;
        echo $USAGE;
        echo "Error in 1st paremeter: not set or directory \"$1\" doesn't exists." >> $LOG_FILE;
        exit 1;
else
        FTP_PROJECT_PATH="$FTP_ROOT$1/";
        PRE_RM_DIR="$PRE_RM_DIR$1/";
        if [ $DEBUG == 1 ]; then echo "SRC: $FTP_PROJECT_PATH"; fi;
        echo "SRC: $FTP_PROJECT_PATH" >> $LOG_FILE;
fi;
 
# Test 2nd parameter: smb directory
if [[ -z "$2" ]] || [[ -n `smbclient $SMB_SERVICE -U $SMB_USER%$SMB_PASS -c "cd $SMB_ROOT$2\\; ls" 2>/dev/null | grep "NT_STATUS_OBJECT_NAME_NOT_FOUND"` ]];
then
        smbclient $SMB_SERVICE -U $SMB_USER%$SMB_PASS -c "cd $SMB_ROOT; ls";
        echo $USAGE;
        echo "Error in 2st paremeter: not set or directory \"$2\" doesn't exists." >> $LOG_FILE;
        exit 1;
else
        SMB_PROJECT_PATH="$SMB_ROOT$2\\";
        if [ $DEBUG == 1 ]; then echo "DIST: $SMB_PROJECT_PATH"; fi;
        echo "SRC: $FTP_PROJECT_PATH" >> $LOG_FILE;
fi;
 
if [[ ! -d $PRE_RM_DIR ]];
then
        echo "Creating $PRE_RM_DIR" >> $LOG_FILE;
        mkdir -p $PRE_RM_DIR;
fi;
 
 
# Copy files from spool directory to switch
if [ $DEBUG == 1 ]; then echo "Copying files to smb share:"; fi;
echo "Copying files to smb share:" >> $LOG_FILE;
cd $FTP_PROJECT_PATH;
for file in *zip; do
    smbclient $SMB_SERVICE -U $SMB_USER%$SMB_PASS -c "cd $SMB_PROJECT_PATH; put $file" -E 2>> $LOG_FILE
    if [ $DEBUG == 1 ]; then echo "Processing file: $file"; fi;
    echo "Processing file: $file" >> $LOG_FILE;
    if [ "$?" -eq "0" ]; then
        if [ $DEBUG == 1 ]; then echo "Moving"; fi;
        echo "Moving" >> $LOG_FILE;
        mv $file $PRE_RM_DIR 2>/dev/null;
    else
        if [ $DEBUG == 1 ]; then echo "ERROR!"; fi;
        echo "ERROR!" >> $LOG_FILE;
 fi;
done;
 
# Cleaning
if [ $DEBUG == 1 ]; then echo "Cleaning"; fi;
echo "Cleaning" >> $LOG_FILE;
find $PRE_RM_DIR -name "*.zip" -type f -ctime +$RM_DAYS -delete >> $LOG_FILE;
if [ $DEBUG == 1 ]; then echo `date` "ftp2switch - stop"; fi;



Что бы по аналогии сделать сделать "Наоборот" с нулевыми знаниями приходится разбирать каждую строчку. Но идет очень туго, а сроки горят.
0
poloten4ik94
6 / 6 / 1
Регистрация: 01.12.2011
Сообщений: 107
14.08.2019, 22:35  [ТС] 9
Цитата Сообщение от Kukstyler Посмотреть сообщение
poloten4ik94, опишите чётко этапы, которые Вы хотите реализовать (испходя из того, прочитанного)


Убрал лишнее, получилось что то подобное.

В данном скрипте все zip архивы перемещаются из смонтированной FTP /mnt/md0/ftp/ в шару "\\_folder\\_folder"
Так же копия на 3 дня попадает в /mnt/md0/spool/ftp/

Необходимо наоборот. Из \\_folder\\_folder" перемещалась в /mnt/md0/spool/ftp/
А копия попадала в "\\_folder\\_folder\\Spool"


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/bin/bash
 
# CONFIGURATION
#--------------
LOG_FILE="/var/log/scripts/ftp2switch.log";
 
# WARNING TRAILING SLASH MANDATORY
FTP_ROOT="/mnt/md0/ftp/";
SMB_SERVICE="\\\\192.168.1.50\\share\\";
SMB_ROOT="\\_folder\\_folder\\";
 
SMB_USER="login";
SMB_PASS="pass";
 
PRE_RM_DIR="/mnt/md0/spool/ftp/";
RM_DAYS=3;
 
DEBUG=0
LOG_FILE="/var/log/scripts/ftp2switch.log";
 
USAGE="USAGE: ftp2switch.sh <ftp_project> <switch_project>"
#--------------
 
echo `date` "ftp2switch - start" >> $LOG_FILE;
 
 
 
# Copy files from spool directory to switch
if [ $DEBUG == 1 ]; 
then 
    echo "Copying files to smb share:"; fi;
    echo "Copying files to smb share:" >> $LOG_FILE;
cd $FTP_ROOT;
for file in *zip; do
    smbclient $SMB_SERVICE -U $SMB_USER%$SMB_PASS -c "cd $SMB_ROOT; put $file" -E 2>> $LOG_FILE
    if [ $DEBUG == 1 ]; then echo "Processing file: $file"; fi;
    echo "Processing file: $file" >> $LOG_FILE;
    if [ "$?" -eq "0" ]; then
        if [ $DEBUG == 1 ]; then echo "Moving"; fi;
        echo "Moving" >> $LOG_FILE;
        mv $file $PRE_RM_DIR 2>/dev/null;
    else
        if [ $DEBUG == 1 ]; then echo "ERROR!"; fi;
        echo "ERROR!" >> $LOG_FILE;
 fi;
done;
 
# Cleaning
if [ $DEBUG == 1 ]; then echo "Cleaning"; fi;
echo "Cleaning" >> $LOG_FILE;
find $PRE_RM_DIR -name "*.zip" -type f -ctime +$RM_DAYS -delete >> $LOG_FILE;
if [ $DEBUG == 1 ]; then echo `date` "ftp2switch - stop"; fi;
Добавлено через 1 час 24 минуты
На данный момент получилось собрать такой скрипт, но c смонтированными smb и ftp.

Но в идеале хотелось бы без монтирования.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash
 
# CONFIGURATION
#--------------
LOG_FILE="/var/log/scripts/switch2ftp.log";
 
# WARNING TRAILING SLASH MANDATORY
FTP_ROOT="/mnt/md0/ftp/";
SMB_ROOT="/mnt/md0/smb";
 
PRE_RM_DIR="/mnt/md0/spool/";
RM_DAYS=3;
 
DEBUG=0
LOG_FILE="/var/log/scripts/switch2ftp.log";
 
USAGE="USAGE: ftp2switch.sh <ftp_project> <switch_project>"
#--------------
 
echo `date` "switch2ftp.log - start" >> $LOG_FILE;
 
 
# Copy files from spool directory to switch
if [ $DEBUG == 1 ];
then
echo "Copying files to ftp server";
fi;
 
cd $SMB_ROOT;
for file in *zip; do
    cp $file  $FTP_ROOT
 
     if [ $DEBUG == 1 ]; then echo "Processing file: $file"; fi;
    echo "Processing file: $file" >> $LOG_FILE;
    if [ "$?" -eq "0" ]; then
        if [ $DEBUG == 1 ]; then echo "Moving"; fi;
        echo "Moving" >> $LOG_FILE;
        mv $file $PRE_RM_DIR 2>/dev/null;
    else
        if [ $DEBUG == 1 ]; then echo "ERROR!"; fi;
        echo "ERROR!" >> $LOG_FILE;
 fi;
done;
 
# Cleaning
if [ $DEBUG == 1 ]; then echo "Cleaning"; fi;
echo "Cleaning" >> $LOG_FILE;
find $PRE_RM_DIR -name "*.zip" -type f -ctime +$RM_DAYS -delete >> $LOG_FILE;
if [ $DEBUG == 1 ]; then echo `date` "ftp2switch - stop"; fi;
0
Kukstyler
Mayorista nolimpiopescado
868 / 575 / 187
Регистрация: 02.04.2009
Сообщений: 2,486
16.08.2019, 14:39 10
 Комментарий модератора 
bidstrup, Kukstyler для персонального общения есть ЛЯ. В ленте прошу придерживаться заданной темы. Офф удалил
Цитата Сообщение от poloten4ik94 Посмотреть сообщение
Но в идеале хотелось бы без монтирования.
Монтирование должно где-то реализоваться. Так что единственный вариант, если не в Вашем скрипте, то где-то в другом месте.

А так, корявенько коечно но на глаз Ваш скрипт должен делать то, что Вам нужно.
0
16.08.2019, 14:39
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2019, 14:39

Keep smb. satisfied
Скажите, пожалуйста, а никто не знает оборот &quot;keep smb. satisfied&quot;? You don't need Anybody...

Атакует smb
Уже второй день по многу раз Avast сигнализирует об угрозе. Выдает такой отчёт: Объект:...

Атакует smb. EternalBlue
Каждый день по многу раз аваст сигнализирует об угрозе. Выдает такой отчёт: Объект:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru