2017-06-30 46 views
1

因此,假設我在文件夾中有3個文本文件,one.txt,two.txtthree.txt。我想將其全部更改爲降價文件。裝聾作啞的方法是...一個unix命令中的多個unix球體

mv one.txt one.md 
mv two.txt two.md 
mv three.txt three.md 

我想做到這一點是一樣的東西mv *.txt *.md的方式,但不工作。很明顯,這些球(*'s)不工作,我認爲他們在工作。所以,我想我要做的是一樣的東西......

mv *.txt CAPTURED_GLOB_ITERANT.md

任何幫助表示讚賞!

+1

這ISN」真的是一個編程問題。在運行'mv'之前,shell將命令擴展爲'mv one.txt three.txt two.txt * .md'('* .md'保持未擴展,因爲沒有文件匹配這個模式)。 – melpomene

回答

1

shell不會捕獲這些模式,從而無法執行您想要的任何操作,並且mv本身也不會執行此操作。所以,用mv你仍然需要一個循環反正:

for f in *.txt; do mv -- "$f" "${f%.txt}.md"; done 

如果你想這樣做一個命令,你需要一個專門的工具,如rename

rename 's/\.txt\z/.md/' *.txt 
+0

常用工具包括'rename'(好的,用Perl編寫的),'rename'(來自linux-util的蹩腳的),或者'mmv'。 – melpomene

+0

啊哈是的謝謝,我正在尋找那東西:) –

+0

這應該是's \ \ txt \ z/.md /'。 '.'是一個正則表達式元字符,需要轉義; '\ z'在字符串結尾處匹配('$'在字符串結尾處匹配,而在字符串結尾處也在換行符處)。 – melpomene