Ренеймер убрать пробелы из файлов
perl -pi -e 's/ /_/g' *кажется, так
На php сам перепишешь.
эээ... а как бы все это теперь реализовать чтобы все мои файлы переименовать. Я просто не очень шарю в перл. Какая последовательность действий?
Блин, дошло. Переименовать.
#!/usr/bin/perl
foreach $a (`ls`) {
chomp $a;
($b = $a) =~ s/ /_/g;
rename $a, $b;
}
Это просто выложить на сервак файл пхп с таким кодом и запустить его через броузер?
Попробуй 
Главное, в нужную директорию клади, или путь во второй строке поменяй.

Главное, в нужную директорию клади, или путь во второй строке поменяй.
Блин.. не пашет... Подскажи поподробней на какой путь нужно изменить? на полный путь? всместо чего в твоем скрипте?
Вот скрипт который переделывает из большого регистра всех файлов в маленький:
Может ктонить его переделать чтобы он вместо пробелов делал символ _
Может ктонить его переделать чтобы он вместо пробелов делал символ _
<?php
/* Scan root directory */
/* ******************* */
if(!isset($dir_arr) && isset($root
{
$main_dir = stripslashes($root);
if(!($handle=@opendir($main_dir
{
print "<DIV align=center><h5>PLEASE SPECIFY A VALID DIRECTORY</h5></div>";
exit;
}
$i=1;
$dir_arr=array;
echo "THE FOLLOWING FILENAMES WERE CONVERTED TO LOWERCASE<br>";
echo "********************************<br>".$main_dir."<br>********************************<br>";
while ($file = readdir($handle
{
if ($file != "." && $file != "..")
{
/* Check if the file is a directory and if so, store it in an array */
/* **************************************************************** */
if(is_dir($main_dir."\\".$file
{
array_push($dir_arr,$file);
}
echo "$i=>\"$file\",<br>";
$file2 = strtolower($file);
if(!(@rename($main_dir."\\".$file,$main_dir."\\".$file2
{
Print "<br>Rename Failed<br>";
}
$i++;
}
}
closedir($handle);
}
/* Traverse through the subfolders stored in the array */
/* **************************************************** */
$x=0;
while($x<count($dir_arr
{
$main_dir = addslashes(stripslashes($root)."\\".$dir_arr[$x]);
if(!($handle=@opendir($main_dir
{
print "<DIV align=center><h5>CANNOT OPEN DIRECTORY</h5></div>";
exit;
}
$i=1;
echo "********************************<br>".stripslashes($main_dir)."<br>********************************<br>";
while ($file = readdir($handle
{
if ($file != "." && $file != "..")
{
if(is_dir($main_dir."\\".$file
{
$dir_arr[]=$dir_arr[$x]."\\".$file;
}
echo "$i=>\"$file\",<br>";
$file2 = strtolower($file);
if(!(@rename($main_dir."\\".$file,$main_dir."\\".$file2
{
Print "<br>Rename Failed<br>";
}
$i++;
}
}
closedir($handle);
$x++;
}
?>
perl -pi -e 's/ /_/g' *Ну ты заебись человеку посоветовал!
ему файлы переименовать надо, а ты в _содержимом_ файлов все пробелы херачишь, хорошо хоть он не понял как запустить...

Судя по всему, достаточно все строки $file2 = strtolower($file); заменить на $file2 = str_replace(" ", "_", $file);
это был бы ахтунг
странное выражение "переименовать все пробелы" напомнило мне "заменить все пробелы", а не "переименовать все файлы"
странное выражение "переименовать все пробелы" напомнило мне "заменить все пробелы", а не "переименовать все файлы"
не не пашет 

Если бы не надо было проводить рекурсивный поиск по каталогам, я бы написал так:
foreach (glob("* *") as $filename) {
rename($filename, str_replace(" ", "_", $filename;
}
Но, наверно, это не очень большая проблема, привинтить сюда поиск директорий и рекурсивный вход в них?У тебя вообще какой доступ на сервер, что консоли нет?
На сервер только ФТП доступ...
> У тебя вообще какой доступ на сервер, что консоли нет?
Консоль - это когда к последовательному порту подключают терминал. А ты хотел сказать слово шелл.
См. также R.O.C. FAQ, Q40.
Консоль - это когда к последовательному порту подключают терминал. А ты хотел сказать слово шелл.
См. также R.O.C. FAQ, Q40.
А код полностью можно?
Ну чо никто помочь не хочет? Программеры блин... 

rename.pl
Запускать так:
perl rename.pl
Переименует все файлы в текущей директории в имени которых есть пробел.
#!/usr/bin/perl -w
use strict;
my ($path, @tmp_files, $i, $new_name, $filenum, $old_name);
$path = ".\\";
opendir(DIR, $path) || die "cannot open dir";
@tmp_files = readdir(DIR);
closedir(DIR) || die "cannot close";
$filenum=@tmp_files;
$i=0;
for($i=0; $i<$filenum; $i++){
if( $tmp_files[$i] =~ / / ){
$old_name = $tmp_files[$i];
$new_name = $old_name;
$new_name =~ s/ /_/g;
print($new_name, "\n");
rename($old_name, $new_name);
}
}
Запускать так:
perl rename.pl
Переименует все файлы в текущей директории в имени которых есть пробел.
чё так сложно, вон выше из двух строчек скрипт то же самое делает
Каюсь... невем, что есть glob. Это какая-то линуховая фишка?
Perl. There's more than one way to do it 

Perl/Win32. There's more than one way to do it, and it's a good thing, because most of the ways don't work.
glob
(PHP 4 >= 4.3.0)
glob -- Find pathnames matching a pattern
Description
array glob ( string pattern [, int flags])
The glob function searches for all the pathnames matching pattern according to the rules used by the shell. No tilde expansion or parameter substitution is done.
Returns an array containing the matched files/directories or FALSE on error
(PHP 4 >= 4.3.0)
glob -- Find pathnames matching a pattern
Description
array glob ( string pattern [, int flags])
The glob function searches for all the pathnames matching pattern according to the rules used by the shell. No tilde expansion or parameter substitution is done.
Returns an array containing the matched files/directories or FALSE on error
А куда этот файл положить? в папку cgi-bin и рядом с ней все файлы которые нужно заменить? Потому что не пашет если я положу в папку где сейчас лежат файлы.
положи в папку cgi-bin
укажи в переменной $path путь к папке, где лежат файлы, имена которых надо изменить
вызови скрипт из броузера "что-то-там/cgi-bin/rename.pl"
укажи в переменной $path путь к папке, где лежат файлы, имена которых надо изменить
вызови скрипт из броузера "что-то-там/cgi-bin/rename.pl"
СпасибО! 5 звезд тебе 

А какие права на файл выставить?
> Каюсь... невем, что есть glob. Это какая-то линуховая фишка?
man perlfunc
/glob
man perlfunc
/glob
Такие, чтоб его можно было выполнить - для скрипта.
Такие, чтоб их можно было читать, изменять - для переименуемых файлов.
Такие, чтоб их можно было читать, изменять - для переименуемых файлов.
Такие, чтоб их можно было читать, изменять - для переименуемых файлов.Достаточно +rx на директорию.
Нифига не пашет - http://www.replays.ru/cgi-bin/rename.pl
Внутри скрипта:
Права на всех файлах и директориях 777
Внутри скрипта:
#!/usr/bin/perl
use strict;
my ($path, @tmp_files, $i, $new_name, $filenum, $old_name);
$path = "/home/d/designsdm/replays_ru/public_html/test";
opendir(DIR, $path) || die "cannot open dir";
@tmp_files = readdir(DIR);
closedir(DIR) || die "cannot close";
$filenum=@tmp_files;
$i=0;
for($i=0; $i<$filenum; $i++){
if( $tmp_files[$i] =~ / / ){
$old_name = $tmp_files[$i];
$new_name = $old_name;
$new_name =~ s/ /_/g;
print($new_name, "\n");
rename($old_name, $new_name);
}
}
Права на всех файлах и директориях 777
ls -1a /home/d/designsdm/replays_ru/public_html/test | awk 'BEGIN{path="/home/d/designsdm/replays_ru/public_html/test/"} {old = $0; gsub(/[ ]/, "_"); system("mv \"" path old "\" \"" path $0 "\"")}'
это если не надо директорию test проходить рекурсивно, если нужно - напиши
это если не надо директорию test проходить рекурсивно, если нужно - напиши
На сервер только ФТП доступ...Какие нафиг ls | awk
Или я чего-то не того?

Блин.
А реально это переделать например скрипт Лориена чтобы он выдавал список всех файлов на сервере. Без индексирования. Просто поиск в определенной директории файлов и затем вывод в виде поиска. Так можно? У него вроде там решена проблема с пробелами в файле...
А реально это переделать например скрипт Лориена чтобы он выдавал список всех файлов на сервере. Без индексирования. Просто поиск в определенной директории файлов и затем вывод в виде поиска. Так можно? У него вроде там решена проблема с пробелами в файле...типа cgi скрипт - какая разница перл там будет или что другое?
если честно, я не знаю какой у Лориена скрипт
если я правильно понял вопрос (возможен ли рекурсивный поиск в директории по названию файла? то - можно
надо только задачу точнее поставить
только я не понял: какие проблемы влекут пробелы в названиях файлов?
если я правильно понял вопрос (возможен ли рекурсивный поиск в директории по названию файла? то - можно
надо только задачу точнее поставить
только я не понял: какие проблемы влекут пробелы в названиях файлов?
Ты дебагом умеешь заниматься? Как именно не пашет? На какой строке происходит ошибка? Смотри логи, если доступны.
Permission denied написано
При исполнении какой команды? Или это невозможно узнать?
Короче проблема в ебучем хостнге. Ох уж сколько я время на это потратил. Вдруг решил попробовать запустить скрипт на мастерхосте и все заработало, а spaceweb.ru полная лажа!
Кто может переписать этот скрипт в php ? Походу там у них глубокие проблемы с перлом
Кто может переписать этот скрипт в php ? Походу там у них глубокие проблемы с перлом
Оставить комментарий
mikestat
На сервере в интернете лежат файлы. Есть какой-нить простенький пхп скрипт который поможет переименовать все пробелы скажем в символ "_". Как это сделать?