Ренеймер убрать пробелы из файлов
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.
А код полностью можно?

#!/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/Win32. There's more than one way to do it, and it's a good thing, because most of the ways don't work.
(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 и рядом с ней все файлы которые нужно заменить? Потому что не пашет если я положу в папку где сейчас лежат файлы.
укажи в переменной $path путь к папке, где лежат файлы, имена которых надо изменить
вызови скрипт из броузера "что-то-там/cgi-bin/rename.pl"

А какие права на файл выставить?
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
это если не надо директорию test проходить рекурсивно, если нужно - напиши
На сервер только ФТП доступ...Какие нафиг ls | awk
Или я чего-то не того?


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