|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 63190.5024 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
09.08.2011, 12:47
|
#1
|
Senior Member
Регистрация: 26.10.2010
Сообщений: 114
Бабло: $27852
|
Как скопировать один файл и папку в кучу папок
Как можно скопировать несколько файлов и папку в кучу других папок?
Чтобы на автомате.
Плиз, виндовые решения не предлагать. Т.е. php, perl, bash пойдет.
|
|
|
09.08.2011, 13:10
|
#2
|
Senior Member
Регистрация: 19.09.2009
Сообщений: 4,096
Бабло: $611825
|
Цитата:
Сообщение от Natud
Как можно скопировать несколько файлов и папку в кучу других папок?
Чтобы на автомате.
|
не понятен вопрос, пример давай. Откуда еще понятно, а вот в кучу других папок это абстракция
|
|
|
09.08.2011, 13:17
|
#3
|
Senior Member
Регистрация: 26.10.2010
Сообщений: 114
Бабло: $27852
ТС -->
|
ТС
ну вот есть список директорий, они все находятся внутри одной конкретной.
Имена папок рандомные, но привести в один вид не проблема. Внутри этих папок уже есть файлы, но они не пересекаются с добавляемыми.
Список добавляемых - константа, т.е. одно и то же для всех.
Пример.
Есть папки с именами
1
2
3
Добаdляем папку add и файл added.htm
В результате получаем:
1/add
2/add
3/add
И в папках этих появляется added.htm
Как то так. Писатель ТЗ из меня фиговый
|
|
|
09.08.2011, 13:56
|
#4
|
Senior Member
Регистрация: 22.08.2008
Сообщений: 927
Бабло: $173840
|
ну как-нить так
ls > list
делаем замену приводим к виду
ln -s /dir/add /dir/list/add
сохраняем list как list.sh, chmod 755 list.sh ; ./list.sh
но это не копирование, это симлинки на случай если конечные файлы не будут отличаться, и меняются они тоже разом в одном файле.
для копирования cp вместо ln -s
|
|
|
09.08.2011, 13:59
|
#5
|
Senior Member
Регистрация: 26.10.2010
Сообщений: 114
Бабло: $27852
ТС -->
|
ТС
Не, надо чтобы файлы и папки именно скопировались, т.к. потом они отправятся на дальнейшую переработку
|
|
|
09.08.2011, 14:01
|
#6
|
Везучий ВМ
Регистрация: 21.08.2009
Сообщений: 1,495
Бабло: $239825
|
Цитата:
<?PHP
define('nl', "\n");
define('brnl', "<br>\n");
//$sourcedir = getcwd()."\\source"; // ОТКУДА надо скопировать
//$destdir = getcwd()."\\basd"; // КУДА надо скопировать
GetForm();
if (!@$_POST['source'] || !@$_POST['dest']) {
exit;
}
$sourcedir = @$_POST['source'];
$destdir = @$_POST['dest'];
setcookie('source', $sourcedir, time()+60*60*24*7, "/");
setcookie('dest', $destdir, time()+60*60*24*7, "/");
//$_SESSION['source'] = $sourcedir;
//$_SESSION['dest'] = $destdir;
$rp = realpath($sourcedir);
$is_dir = is_dir($sourcedir);
if ($rp && $is_dir) {
echo "Start work...".brnl;
$tmp = glob($destdir."\\*");
foreach($tmp as $n => $dir) {
if (!is_dir($dir)) { continue; }
$name = GenNick(rand(4, 8), false);
$fullname = $destdir."\\".$name;
//$fullname = $dir;
do {
if (rename($dir, $fullname)) { $exit = true; } else { $exit = false; usleep(10000); }
} while(!$exit);
$num = dircopy($sourcedir, $fullname, false);
echo date("H:i:s")." - ".($n+1).": ".$num." files copied to \"".$fullname."\"".brnl;
flush_buffers();
}
echo "Finish work.".brnl;
} else {
echo "Error in source dir";
}
/*
function dircopy($srcdir, $dstdir, $verbose = false) {
$num = 0;
if(!is_dir($dstdir)) mkdir($dstdir);
if($curdir = opendir($srcdir)) {
while($file = readdir($curdir)) {
if($file != '.' && $file != '..') {
$srcfile = $srcdir . "\\" . $file;
$dstfile = $dstdir . "\\" . $file;
if(is_file($srcfile)) {
if(is_file($dstfile)) {
$ow = filemtime($srcfile) - filemtime($dstfile);
} else {
$ow = 1;
}
if($ow > 0) {
if($verbose) echo "Copy '".$srcfile."' → '".$dstfile."'...";
if(copy($srcfile, $dstfile)) {
touch($dstfile, filemtime($srcfile)); $num++;
if($verbose) echo "OK".brnl;
} else echo "Error: File '$srcfile' could not be copied!".brnl;
}
} else if(is_dir($srcfile)) {
$num += dircopy($srcfile, $dstfile, $verbose);
}
}
}
closedir($curdir);
}
return $num;
}
*/
function GetForm() {
//@$_SESSION['source'] ? $source = $_SESSION['source'] : $source = getcwd();
//@$_SESSION['dest'] ? $dest = $_SESSION['dest'] : $dest = getcwd();
@$_COOKIE['source'] ? $source = $_COOKIE['source'] : $source = getcwd()."\source";
@$_COOKIE['dest'] ? $dest = $_COOKIE['dest'] : $dest = getcwd();
echo "<form action='?' method='post'>".nl;
echo "<h3>Copy FROM → TO:</h3>";
echo "<input type='text' name='source' value='".$source."' size='50'>".nl;
echo "→ <input type='text' name='dest' value='".$dest."' size='50'>".nl;
echo "<input type='submit' value='go'>".brnl.brnl;
echo "<b>* without slash at the end of path</b>";
echo "</form>".nl;
}
function dircopy($srcdir, $dstdir, $verbose = false) {
$num = 0;
if(!is_dir($dstdir)) mkdir($dstdir);
$all_dest_dirs = glob($dstdir."\\*", GLOB_ONLYDIR);
array_unshift($all_dest_dirs, $dstdir);
foreach($all_dest_dirs as $n => $dstdir) {
//echo $dstdir.brnl;
// ========================================= //
if($curdir = opendir($srcdir)) {
while($file = readdir($curdir)) {
if($file != '.' && $file != '..') {
$srcfile = $srcdir . "\\" . $file;
$dstfile = $dstdir . "\\" . $file;
if(is_file($srcfile)) {
if(is_file($dstfile)) {
$ow = filemtime($srcfile) - filemtime($dstfile);
} else {
$ow = 1;
}
if($ow > 0) {
if($verbose) echo "Copy '".$srcfile."' → '".$dstfile."'...";
if(copy($srcfile, $dstfile)) {
touch($dstfile, filemtime($srcfile)); $num++;
if($verbose) echo "OK".brnl;
} else echo "Error: File '$srcfile' could not be copied!".brnl;
}
} else if(is_dir($srcfile)) {
$num += dircopy($srcfile, $dstfile, $verbose);
}
}
}
closedir($curdir);
}
// ========================================= //
}
return $num;
}
function GenNick($size = 0, $use_digits = true){
$char = 'abcdefghijklmnopqrstuvwxyz';
if ($use_digits) { $char .= '1234567890'; }
$kol = strlen($char);
$str = "";
while($size--) {
$str .= $char[rand(0, ($kol-1))];
}
return $str;
}
function flush_buffers() {
@ob_end_flush();
@ob_flush();
@flush();
@ob_start();
}
?>
|
должен будеш. переименование папок убери если надо
__________________
Не зная ни сна и ни отдыха, при лунном и солнечном свете, легко и просто качаю бабло в интернете
|
|
|
09.08.2011, 14:04
|
#7
|
Senior Member
Регистрация: 22.08.2008
Сообщений: 927
Бабло: $173840
|
Цитата:
Сообщение от Natud
Не, надо чтобы файлы и папки именно скопировались, т.к. потом они отправятся на дальнейшую переработку
|
для копирования cp вместо ln -s
|
|
|
09.08.2011, 14:53
|
#8
|
Senior Member
Регистрация: 26.10.2010
Сообщений: 114
Бабло: $27852
ТС -->
|
ТС
res1dent, чето не добавляет
Пишет
Цитата:
Start work...
Finish work.
|
Должен буду 100 пудов
|
|
|
09.08.2011, 15:13
|
#9
|
Везучий ВМ
Регистрация: 21.08.2009
Сообщений: 1,495
Бабло: $239825
|
там все чо хош добавляет
даже папку с кучей файлов
хз чо у тебя не так
__________________
Не зная ни сна и ни отдыха, при лунном и солнечном свете, легко и просто качаю бабло в интернете
|
|
|
09.08.2011, 15:18
|
#10
|
Senior Member
Регистрация: 26.10.2010
Сообщений: 114
Бабло: $27852
ТС -->
|
ТС
res1dent, ок, наверное я что-то не так делаю. Буду дальше пробовать.
|
|
|
|