2017-06-30 7 views
1

フォルダに3つのテキストファイル、one.txttwo.txt、およびthree.txtがあるとします。私はすべてをマークダウンファイルに変更したいと思います。ダムの方法は...私はこれを行うにはしたいと思い1つの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 one.txt three.txt two.txt * .md'(' * .md'は 'mv'を実行する前にこのパターンと一致するファイルがないので展開されません)に展開します。 – melpomene

答えて

1

シェルは、あなたが望むようにパターンをキャプチャすることはありません。mv自体もこれをしません。だから、mvとあなたはまだ、とにかくループが必要になります

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

を使用すると、1つのコマンドで、あなたが専門的なユーティリティが必要になりますことを行いたい場合は、そのようrenameなど:

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

一般的なユーティリティには、 'rename'(Perlで書かれた良いもの)、' rename'(linux-utilからの奇妙なもの)、おそらく 'mmv'があります。 – melpomene

+0

Ahaはいありがとう、私はそのことを探していた: –

+0

これは 's/\。txt \ z/.md /'でなければならない。 '.'は正規表現のメタキャラクターであり、エスケープする必要があります。 '\ z'は文字列の終わりと一致します(' $ 'は文字列の終わりに一致しますが、文字列の終りの前の改行文字にも一致します)。 – melpomene