2011-05-04 102 views
5

對於bash,我很新,所以很遺憾,如果這是一個基本問題。我試圖重命名一堆mp3文件,以便將它們的文件名加上1-,並且mv *.mp3 1-*.mp3不起作用。所以我試圖腳本它,先用回聲測試的命令:Glob在bash中重命名

for f in *.mp3 ; do echo mv \'$f\' \'1-$f\'; done 

這似乎輸出我喜歡的命令,所以我刪除了回聲,改變了命令

for f in *.mp3 ; do mv \'$f\' \'1-$f\'; done 

哪失敗。接下來,我試圖管道命令以後,像這樣

for f in *.mp3 ; do echo mv \'$f\' \'1-$f\'; done | /bin/sh 

其中的工作,但如果有人可以賜教,爲什麼中間命令不工作,我很想知道。或者,如果有一種更加優雅的單行程可以做我想做的事情,我也會很有興趣看到這一點。

回答

7

我認爲你必須命令更改爲

for f in *.mp3 ; do mv "$f" "1-$f"; done 

否則,你會通過類似'file1.mp3''1-file1.mp3'mv(包括單引號)。

+0

我打算包括單引號,因爲否則我需要用反斜槓將所有空格轉義。 MV不介意報價。然而,這些文件名也可以包含「in」(和「就此而言) – wim 2011-05-04 12:09:40

+0

當你在'$ f'周圍使用雙引號時,你不需要轉義空格,如果文件名包含單雙引號 – bmk 2011-05-04 12:28:59

7

空運行:

rename -n 's/^/1-/' *.mp3 

取出-n,如果它看起來是正確運行的命令。 man rename瞭解詳情。

+1

這適用於Debian,但不適用於CentOS,其中rename命令不遵循此語法並且功能強大得多。 – 2017-05-29 10:51:20