1

我有大量需要svn mv'd 的文件,我不想全部手动完成。

每个文件名都遵循格式XYZSomething.txtor SomethingElse.txt, 并应分别重命名为xyzSomething.txtand somethingElse.txt

如果我不需要处理缩写前缀,我可以使用类似的东西

for f in *; do svn mv $f ${f,}; done

它只小写文件名中的第一个字符。就目前而言,这让我完成了 90% 的工作,所以用手完成它不会太痛苦;但我仍然想知道如何覆盖未来知识的前缀。

那么请告诉我,StackOverflow 的 Bash 大神们,重命名这些文件的最佳方法是什么?

4

2 回答 2

0

这两个例子都可以解决问题:

  $ sed -r 's@^([a-Z]+)([A-Z].*)@\L\1\E\2@' <<< XYZSomething
  xyzSomething

  $ sed -r 's@^([a-Z]+)([A-Z].*)@\L\1\E\2@' <<< SomethingElse
  somethingElse
于 2012-10-23T19:34:02.450 回答
0

所以你可以这样做:

$ echo ThisIsAFileName | sed 's/^\([A-Z]*\)\(.*\)/\L\1\E\2/'
thisIsAFileName

或者:

for f in *; do svn mv $f `echo $f | sed 's/^\([A-Z]*\)\(.*\)/\L\1\E\2/'`; done

sed 中的 \L 将使以下字母小写直到 \E

如果它只是第一个字母,那么你可以这样做:

$ echo ThisIsAFileName | sed 's/.*/\l&/'
thisIsAFileName

\l 只会将下一个字母变为小写

但是,XYZFileName 将被重命名为 xyzfileName,只是因为 XYZ 和 F 之间的区别不存在......

希望这可以帮助

于 2012-10-23T19:29:28.057 回答