2010-04-19 63 views
4

如何替換linux中文件夾名稱中的相同文本?說我有「Photos_Jun」,「Photos_July」,「Photos_Aug」等最新最簡單的方法,我可以重新命名他們像「照片君」,「照片七月」等(基本上我想用下劃線替換一空間「」我有這些文件夾的大約200替換文件夾名稱中的文本

我一直在尋找的解決方案:。How can I easily bulk rename files with Perl?

它看起來像什麼即時尋找但我不知道如何做一個正則表達式匹配的文件夾說是字母數字後跟一個「_」。

所有文件都有非數字名稱,所以我認爲[a-zA-Z]是正確的方式酸。

perl -e 'foreach $f (glob("File\\ Name*")) { $nf = $f; $nf =~ s/(\d+)$/sprintf("%03d",$1)/e; print `mv \"$f\" \"$nf\"`;}' 

感謝您的幫助!

+0

謝謝大家誰回答,非perl的解決方案爲我工作最好的。我有一些破折號去除,並且當我用_替換_時,它也很好。 – dannyb 2010-04-19 02:07:20

回答

2

,如果你是在* nix,你不介意的非Perl的解決方案,這裏有一個外殼(bash)的解決方案。滿意後刪除echo

#!/bin/bash 
shopt -s extglob 
for file in +([a-zA-Z])*_+([a-zA-Z])/; do echo mv "$file" "${file//_/ }"; done 
+0

這工作,我不得不刪除「回聲」它的工作,謝謝! – dannyb 2010-04-19 01:58:40

+0

小修改。如果你只想要文件夾,就放下斜線。請參閱編輯。 – ghostdog74 2010-04-19 02:07:19

0
perl -e 'use File::Copy; foreach my $f (glob("*")) { next unless -d $f; my $nf = $f; $nf =~ s/_/ /g; move($f, $nf) || die "Can not move $f to $nf\n"; } 

塗展開一行程序:

use strict; # Always do that in Perl. Keeps typoes away. 
use File::Copy; # Always use native Perl libraries instead of system calls like `mv` 
foreach my $f (glob("*")) { 
    next unless -d $f; # Skip non-folders 
    next unless $f =~ /^[a-z_ ]+$/i; # Reject names that aren't "a-zA-Z", _ or space 
    my $new_f = $f; 
    $new_f =~ s/_/ /g; # Replace underscore with space everywhere in string 
    move($f, $nf) || die "Can not move $f to $nf: $!\n"; 
        # Always check return value from move, report error 
} 
3

Linux有一個rename命令:

rename '-' ' ' Photos_* 
相關問題