LinuxForum.Fans
Тема

Задача массового копирования файла в папки

Автор: master2005 17 сообщений 5527 просмотров
#223937

Прошу помощи.
Дано: сервак на Centos 6.0 , доступ к нему по ftp организован.
на сервере имеется один файл, который надо скопировать в тысячи папок на этом же сервере.
Как решить эту задачу ?
Естественно вручную копировать этот файл - нереально.

P.s. На форуме тотал коммандер я нашел скрипт, который делает такое, но на локальной машине. По фтп на линукс он не работает, к сожалению.

#223941
master2005 написал:

я нашел скрипт, который делает такое, но на локальной машине.

Скрипт выложи.

#223948

Скрипт для Тотал Коммандер.

не знаю можно ли тут ссылки постить на другие форумы, поэтому привожу текстом.



'========================================================
' Копирование выделенных файлов в несколько каталогов

' Параметры вызова из TC:
' %L
'========================================================
Option Explicit
If WScript.Arguments.Count = 0 Then
MsgBox "Не заданы параметры!", vbOKOnly + vbExclamation, "Копирование в несколько каталогов"
WScript.Quit
End If
Dim TCS, WSH, Targets, TargStr, CommandLineLimit, StrBeg, StrEnd, Delim, Pos, Start
CommandLineLimit = 2060
Delim = "?"
Set TCS = CreateObject("TCScript.Helper")
Set WSH = CreateObject("WScript.Shell")
Targets = TCS.GetTrgSelectedFiles(1)
TargStr = Join(Targets, Delim)
StrBeg = "killcopy.exe |" & WScript.Arguments(0) & "|"
StrEnd = "| -nx"
Pos = 0
Do
TargStr = Mid(TargStr, Pos + 1)
Start = CommandLineLimit - Len(StrBeg) - Len(StrEnd)
If Start <= Len(TargStr) Then
Pos = InStrRev(TargStr, Delim, Start)
Else
Pos = Len(TargStr) + 1
End If
WSH.Run StrBeg & Left(TargStr, Pos - 1) & StrEnd, 7, True
Loop While Len(StrBeg) + Len(TargStr) + Len(StrEnd) > CommandLineLimit

Set TCS = Nothing
Set WSH = Nothing
WScript.Quit

#223952

Идиотизм.
Начиная с текущего каталога копируем во все вложенные.

text
find . -type d | while read src; do cp  file2cop $src; done

Оборачиваем в скрипт

text
#!/bin/bash
find . -type d | while read src; do 
  echo  $1 $src
done

echo $1 $src - для теста потом меняем на cp $1 $src
Называем mcopy.sh к примеру, делаем исполняемым
chmod a+x mcopy.sh
Пользуемся:

text
cd /нужный/каталог
/путь/к/скрипту/mcopy.sh file2copy
#223955
newzenon написал:
find . -type d | while read src; do cp file2cop $src; done
text
find . -type d -exec cp FILE_TO_COPY {} \;

P.S. ...но всё это возможно, если есть доступ к оболочке.

#223957

мм... Ребят, я в программировнии скриптов - нуб полный, поэтому сорри..


2 newzenon,
во все вложенные не надо, т.е. если в одной директории содержатся куча папок, вот в них надо.
а если внутри папок еще встретятся папки, то в них уже не надо.

надеюсь понятно объяснил..

#223958
master2005 написал:
во все вложенные не надо, т.е. если в одной директории содержатся куча папок, вот в них надо.
а если внутри папок еще встретятся папки, то в них уже не надо.
text
find . -maxdepth 1 -type d -exec cp FILE_TO_COPY {} \;

Повторюсь:

Lupo Alberto написал:
P.S. ...но всё это возможно, если есть доступ к оболочке.
#223963

Lupo Alberto, теперь TC нужно объяснить как этот доступ получить по ftp wink

#223969

))))
Теперь мне нужно объяснить , что мне сделать с этой строкой:

find . -maxdepth 1 -type d -exec cp FILE_TO_COPY {} \;

Объясните плиз, доступно)))
доступ по фтп у меня есть, доступ рутовый консольно есть тоже)))

#223971

можно по асе, буду очень признателен

6- четыре - четыре - 804068

#223995
master2005 написал:
доступ рутовый консольно есть тоже)))

Это по ssh или telnet'у? Где находится файл, который нужно скопировать?

master2005 написал:
можно по асе, буду очень признателен

«Нет, уж лучше вы к нам.» © Лёлик, к/ф «Бриллиантовая рука».
Мой jabber-аккаунт в профиле.

#224003
Lupo Alberto написал:

find . -maxdepth 1 -type d -exec cp FILE_TO_COPY {} \;

респект Lupo Alberto, работает.
по ssh входим в каталог, где лежит нужная тыща папок, и далее запускаем команду выше с указанием пути где лежит файл для копирования.

#224030

А почему никто не обратил внимание, что подобное засирание одним файлом тыщи каталогов не есть тру вэй в *nix'е? Почему файло копируем мильон раз а не делаем на него линки? У нас разве диск на сервере безразмерный?

#224052

Cruiser78, возможно вы и правы, но задача была озвучена именно «скопировать». Нельзя исключать и такой вероятности, что копируется лишь шаблон какого-либо файла, а потом в зависимости от места нахождения в него вносятся определённые индивидуальные изменения.

#224079
Lupo Alberto написал:
возможно вы и правы, но задача была озвучена именно «скопировать».

угу. "скопировать в папки". ТС не в курсе, что никаких "папок" в линуксе нет, и естественно про хардлинки тоже не в курсе. Ну а вы, вместо того, что бы рассказать, даёте команду. Как обычно... Респкт.

Для ТС: сотрите нафиг свои файлы, и используйте ln вместо cp. Данная команда создаёт хардлинки, т.е. новые имена данного файла. Это Ъ, и занимает немного место (один файл лежит в тысяче мест сразу).

#224080

drBatty,

Lupo Alberto написал:
Нельзя исключать и такой вероятности, что копируется лишь шаблон какого-либо файла, а потом в зависимости от места нахождения в него вносятся определённые индивидуальные изменения.

Можно, как угодно долго, обсуждать вероятности:

drBatty написал:
Для ТС: сотрите нафиг свои файлы, и используйте ln вместо cp. Данная команда создаёт хардлинки, т.е. новые имена данного файла.

А вдруг дерево каталогов на разных дисках?

#224086
Lupo Alberto написал:
А вдруг дерево каталогов на разных дисках?

возможно. и да вы правы, ваше решение замечательно. оно работает. оно правда не оптимально(в 95% случаев), но какая нафиг разница? главное - работает.

Войдите или зарегистрируйтесь, чтобы ответить.