2017-06-30 48 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