我正在尋找一種方法在Bash中重命名我的文件前綴。 這些文件都在一個文件夾中。其他文件將不會在其中。增加多個文件前綴?
00 - Artist - Title.mp3
01 - Artist - Title.mp3
...等等
...等等
到
01 - Artist - Title.mp3
02 - Artist - Title.mp3
前綴也可以是隻有一個(0,1,2, ...),雙倍(00,01,02,...),三倍...前綴。
我正在尋找一種方法在Bash中重命名我的文件前綴。 這些文件都在一個文件夾中。其他文件將不會在其中。增加多個文件前綴?
00 - Artist - Title.mp3
01 - Artist - Title.mp3
...等等
...等等
到
01 - Artist - Title.mp3
02 - Artist - Title.mp3
前綴也可以是隻有一個(0,1,2, ...),雙倍(00,01,02,...),三倍...前綴。
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的數量,長度等
這是有風險的業務,但這裏有一個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
,請成爲我的客人。
那麼偉大的工程。我希望Bash。在Perl中定義目錄,是否在for('/ directory ..'){? – Sebastian
@ Sebastian:「定義目錄」是什麼意思? – choroba
假設我將這個命令添加到我的bash文件中。我想運行您在特定目錄上發佈的perl-command。我在哪裏可以告訴這個for-loop做到這一點,例如/ home/media/ – Sebastian