2009-06-11 272 views
0

我在一個文件夾中有一些名稱類似abc_old.php的文件,現在我想重命名爲abc.php,這是我想從我的所有文件名中刪除「_old」。如何我一次性做到這一點?重命名文件夾中的文件

+1

Over ftp?視窗? Linux呢? – Blorgbeard 2009-06-11 11:52:33

+0

你想寫一個自定義的ftp應用程序嗎?或者您是否使用現有的ftp客戶端? – Tony 2009-06-11 11:53:13

回答

1

殼牌設施將通過FTP進行限制。我會將文件複製到本地目錄。在bash(假設在你上面聲稱擁有Linux中提供):

for filename in *_old.php 
do 
    mv $filename ${filename%_old.php}.php 
done 

%操作字符串的結尾相匹配,並返回$文件名不匹配段(在%後位)。因此,上面的內容會打印_old.php,然後替換.php。

我還沒有測試過上述內容。先在虛擬目錄上嘗試它。

0

編寫一個循環循環,解析文件名,進行所需更改並重命名文件的程序。我不知道有任何這樣做的捷徑。

您可能會發現將文件複製到本地計算機更容易,運行程序以更改名稱,然後將新命名的文件上傳到FTP服務器(並且顯然刪除舊文件)

1

很久以前,我在Programming Perl 4 O'Reilly的書後面發現了一小段代碼,可以讓你使用正則表達式重命名文件。我從那以後就使用過它。能夠使用Perl正則表達式,特別是tr和s,使文件重命名變得如此簡單。因此,請將其粘貼到路徑中的一個名爲rename的文件中,使其可執行爲「chmod ugo + x rename」,並將其保存爲常規工具庫的一部分。檢查你的perl是在哪個perl中,並適當調整第一行。這假設你在一個可以訪問Perl的Unix系統上。

#!/usr/bin/perl 
# Usage: rename perlexpr [files] 

($op = shift) || die "Usage: rename perlexpr [filenames]\n"; 
if ([email protected]) 
{ 
    @ARGV = <STDIN>; 
    chop (@ARGV); 
} 
for (@ARGV) 
{ 
    $was = $_; 
    eval $op; 
    die [email protected] if [email protected]; 
    rename ($was,$_) unless $was eq $_; 
} 

所以你的例子,你可以做

rename "s/_old//" *_old.php 

哎呀。這個問題的標籤是ftp。如果你的訪問是通過ftp訪問的,那麼這是行不通的,因爲你不能訪問shell。