2015-06-18 68 views
1

我正在尋找一種方法在Bash中重命名我的文件前綴。 這些文件都在一個文件夾中。其他文件將不會在其中。增加多個文件前綴?

00 - Artist - Title.mp3 
01 - Artist - Title.mp3 

...等等

...等等

01 - Artist - Title.mp3 
02 - Artist - Title.mp3 

前綴也可以是隻有一個(0,1,2, ...),雙倍(00,01,02,...),三倍...前綴。

回答

1

Perl的解決方案:

perl -we 'for (@ARGV) { 
       my ($n, $r) = /^([0-9]+)(.*)/; 
       rename $_, sprintf("%0" . length($n) . "d", 1 + $n) . $r; 
      }' *.mp3 

的正則表達式匹配精華,$ N的數量,其餘的$ R。 然後,$ n + 1被sprintf格式化爲零填充,具有與原始數字相同的長度。

需要注意的是它改變了9 99的數量,長度等

+0

那麼偉大的工程。我希望Bash。在Perl中定義目錄,是否在for('/ directory ..'){? – Sebastian

+0

@ Sebastian:「定義目錄」是什麼意思? – choroba

+0

假設我將這個命令添加到我的bash文件中。我想運行您在特定目錄上發佈的perl-command。我在哪裏可以告訴這個for-loop做到這一點,例如/ home/media/ – Sebastian

0

這是有風險的業務,但這裏有一個SH的解決方案,似乎工作:

ls *.mp3 | sort -rn | while read f 
do 
    number=`echo "$f" | sed 's/ .*//'` 
    rest=`echo "$f" | sed 's/^[^ ]* //'` 

    number2=`expr $number + 1` 
    number2f=`printf %02d $number2` 

    mv -i "$number $rest" "$number2f $rest" 
done 

sort -rn使其如果有相同藝術家和標題的相鄰編號文件(這可能不會發生,儘管如果我從字面上理解你的例子的話)不會嘗試覆蓋任何東西。

mv -i所以它會問你之前,它覆蓋任何東西,如果有任何這些情況下設法反正。

如果你有一個更清潔的方式,你喜歡把$f分成$number$rest,請成爲我的客人。