2013-11-02 38 views
1

我的WordPress網站是最近提出的,後來我發現圖像文件名更改爲這種文件名:如何將這些文件的文件名更改爲「#U4e09#U661f#U4ee5#U ..」?

#U4e09#U661f#U4ee5#U.. 

他們都曾經是名在中國。不知何故,他們改變爲這種文件名,我不知道其中的原因(此外,我沒有舊文件,因爲我改變了服務器和舊文件被刪除)

現在無法加載這些圖像我的帖子。有什麼方法可以使它工作嗎?

+0

你還有服務器上的文件嗎?我懷疑這些文件名只是編碼的unicode字符串,所以文件_names_可能可以恢復,但如果你沒有這些文件,這樣做沒有意義。如果您確實擁有這些文件,請考慮將這些文件和文件名重命名爲拉丁字符集 - 這會讓您更輕鬆! – halfer

+0

這些文件位於服務器上。但是他們的文件名被改爲這種類型,現有的文章無法識別這些文件名。 –

+0

有多少文件受到影響?如果數字較小,則在服務器上重命名它們(通過SSH或FTP)?據推測,你可以從你的帖子(並通過手動查看圖像)應該哪些?我建議將它們重命名爲拉丁字符集中的有意義的名稱,然後編輯每個帖子(但如果您有很多文件,這可能會有很多工作)。 – halfer

回答

2

這個Perl腳本可能的工作,但只有當你的文件系統使用UTF-8編碼的文件名。給它一個想試試:

#!/usr/bin/perl 
# 
# Rewrite UTF-16 codes in file names 
# Usage: fixutf.pl <directory> 
# (Defaults to current directory if omitted) 
# 

use strict; 
use warnings; 
my $oldname; 
my $newname; 
my $directory = '.'; 

binmode(STDOUT,':raw:encoding(UTF-8)'); 
if ($ARGV[0]) { 
    $directory = $ARGV[0]; 
} 
opendir (DIR,$directory) or die $!; 
print "Scanning directory '$directory/' ...\n"; 

while ($oldname = readdir(DIR)) { 
    if ($oldname =~ /#U([0-9a-f]{4})/) { 
     $newname = $oldname; 
     $newname =~ s/#U([0-9a-f]{4})/pack('U',hex($1))/seg; 
     rename $oldname,$newname; 
     print " Renamed $oldname to $newname\n"; 
    } 
} 

print "Finished\n"; 

保存此爲「fixutf.pl」,改變其權限0755,然後將其從一個包含所有文件的目錄中運行它,或者路徑傳遞到這個目錄作爲命令行參數。請首先備份您的文件,並注意重命名過程將覆蓋同名文件(如果它們存在於同一目錄中)。

+0

。現在我恢復所有的圖像......多謝 –

+0

還有一個問題,爲什麼使用「ls」,這些文件名顯示「??????」代替。但他們可以通過WordPress的帖子加載。 –

+0

這意味着您的終端在顯示Unicode字符時遇到問題。在某些系統上,您可以通過在命令行輸入'export LANG =「en_GB.UTF-8」'來解決這個問題。 (如果有效,請將此行添加到主目錄中的'.profile')。但我無法保證它可以在您的系統上正常工作。 –