2012-06-19 47 views
1

在我的应用程序的config文件夹中,我想要将所有*.yml.sample文件转换为*.yml。有人可以帮忙吗?我想用终端来完成这个任务。有没有一个单一的命令来做这件事?使用终端更改文件夹中的文件名

回答

2

的一种方法,使用sed

ls -1 *.yml.sample | sed "s%\(.*\).yml.sample%mv & \1.yml%" | sh 

或者更简单地说:

ls -1 *.yml.sample | sed "s%\(.*\).sample%mv & \1%" | sh 

编辑:

ls是方便,但解析它可能会失败,空格,换行等。在这种情况下,循环和bash字符串替换是最好的:

for i in *.yml.sample; do mv "$i" "${i%.sample}"; done 

一些阅读你:

Rename multiple files with Linux
Why you shouldn't parse the output of ls

HTH

+0

感谢您的回复。但它适用于没有空间的文件名。但是它的空间文件名失败。请帮忙! – Arun

+0

请参阅我的更新。干杯。 – Steve

+0

谢谢史蒂夫。我感觉它是最棒的! – Arun

3

使用简单的shell循环和basename命令剥离第二个扩展。

for f in *.yml.sample; do 
    mv $f `basename $f .sample` 
done 
+0

感谢您的反应larsmans。只是想知道是否有一个命令使用模式或类似的东西。 – Arun

+0

@Arun:Linux系统通常有一个名为'rename'的命令。虽然这不是标准化的;它带有Perl。 –

+0

当我在终端中点击此命令时,它正在等待来自我的输入。我对什么提供了困惑。你能帮忙吗? – Arun

2

这是一个简单的一个mmv做。

$ mmv "*.yaml.sample" "#1.yaml" 

引号在这里很重要。

+0

你能告诉我这是怎么回事? – Arun

+0

@Arun:现在增加一个示例 – LeoNerd

+0

'mmv'可能不能在所有系统上移植,但是可以替代'rename' +1 – Steve

1
find . -iname "*.png" -exec bash -c 'mv "$0" "${0%\.png}@2x.png"' {} \; 

我已经使用这个当前文件夹中的所有文件 “巴纽” 到“重命名@ 2x.png”。这对于给视网膜图像命名非常有用。广泛用于ios开发人员。

相关问题