Прошу помощи.
Дано: сервак на Centos 6.0 , доступ к нему по ftp организован.
на сервере имеется один файл, который надо скопировать в тысячи папок на этом же сервере.
Как решить эту задачу ?
Естественно вручную копировать этот файл - нереально.
P.s. На форуме тотал коммандер я нашел скрипт, который делает такое, но на локальной машине. По фтп на линукс он не работает, к сожалению.
Задача массового копирования файла в папки
я нашел скрипт, который делает такое, но на локальной машине.
Скрипт выложи.
Скрипт для Тотал Коммандер.
не знаю можно ли тут ссылки постить на другие форумы, поэтому привожу текстом.
'========================================================
' Копирование выделенных файлов в несколько каталогов
' Параметры вызова из 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
Идиотизм.
Начиная с текущего каталога копируем во все вложенные.
find . -type d | while read src; do cp file2cop $src; doneОборачиваем в скрипт
#!/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
Пользуемся:
cd /нужный/каталог
/путь/к/скрипту/mcopy.sh file2copyfind . -type d | while read src; do cp file2cop $src; done
find . -type d -exec cp FILE_TO_COPY {} \;P.S. ...но всё это возможно, если есть доступ к оболочке.
мм... Ребят, я в программировнии скриптов - нуб полный, поэтому сорри..
2 newzenon,
во все вложенные не надо, т.е. если в одной директории содержатся куча папок, вот в них надо.
а если внутри папок еще встретятся папки, то в них уже не надо.
надеюсь понятно объяснил..
во все вложенные не надо, т.е. если в одной директории содержатся куча папок, вот в них надо.
а если внутри папок еще встретятся папки, то в них уже не надо.
find . -maxdepth 1 -type d -exec cp FILE_TO_COPY {} \;Повторюсь:
P.S. ...но всё это возможно, если есть доступ к оболочке.
Lupo Alberto, теперь TC нужно объяснить как этот доступ получить по ftp wink
))))
Теперь мне нужно объяснить , что мне сделать с этой строкой:
find . -maxdepth 1 -type d -exec cp FILE_TO_COPY {} \;
Объясните плиз, доступно)))
доступ по фтп у меня есть, доступ рутовый консольно есть тоже)))
можно по асе, буду очень признателен
6- четыре - четыре - 804068
доступ рутовый консольно есть тоже)))
Это по ssh или telnet'у? Где находится файл, который нужно скопировать?
можно по асе, буду очень признателен
«Нет, уж лучше вы к нам.» © Лёлик, к/ф «Бриллиантовая рука».
Мой jabber-аккаунт в профиле.
find . -maxdepth 1 -type d -exec cp FILE_TO_COPY {} \;
респект Lupo Alberto, работает.
по ssh входим в каталог, где лежит нужная тыща папок, и далее запускаем команду выше с указанием пути где лежит файл для копирования.
А почему никто не обратил внимание, что подобное засирание одним файлом тыщи каталогов не есть тру вэй в *nix'е? Почему файло копируем мильон раз а не делаем на него линки? У нас разве диск на сервере безразмерный?
Cruiser78, возможно вы и правы, но задача была озвучена именно «скопировать». Нельзя исключать и такой вероятности, что копируется лишь шаблон какого-либо файла, а потом в зависимости от места нахождения в него вносятся определённые индивидуальные изменения.
возможно вы и правы, но задача была озвучена именно «скопировать».
угу. "скопировать в папки". ТС не в курсе, что никаких "папок" в линуксе нет, и естественно про хардлинки тоже не в курсе. Ну а вы, вместо того, что бы рассказать, даёте команду. Как обычно... Респкт.
Для ТС: сотрите нафиг свои файлы, и используйте ln вместо cp. Данная команда создаёт хардлинки, т.е. новые имена данного файла. Это Ъ, и занимает немного место (один файл лежит в тысяче мест сразу).
drBatty,
Нельзя исключать и такой вероятности, что копируется лишь шаблон какого-либо файла, а потом в зависимости от места нахождения в него вносятся определённые индивидуальные изменения.
Можно, как угодно долго, обсуждать вероятности:
Для ТС: сотрите нафиг свои файлы, и используйте ln вместо cp. Данная команда создаёт хардлинки, т.е. новые имена данного файла.
А вдруг дерево каталогов на разных дисках?
А вдруг дерево каталогов на разных дисках?
возможно. и да вы правы, ваше решение замечательно. оно работает. оно правда не оптимально(в 95% случаев), но какая нафиг разница? главное - работает.