首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动重命名文件

自动重命名文件
EN

Stack Overflow用户
提问于 2016-06-28 18:52:42
回答 3查看 50关注 0票数 0

我有一堆文件(超过1000份),如下所示

代码语言:javascript
复制
$ ls 
org.allenai.ari.solvers.termselector.BaselineLearnersurfaceForm-dev.lc
org.allenai.ari.solvers.termselector.BaselineLearnersurfaceForm-dev.lex
org.allenai.ari.solvers.termselector.BaselineLearnersurfaceForm-train.lc
org.allenai.ari.solvers.termselector.BaselineLearnersurfaceForm-train.lex
org.allenai.ari.solvers.termselector.BaselineLearnersurfaceForm.lc
org.allenai.ari.solvers.termselector.BaselineLearnersurfaceForm.lex
org.allenai.ari.solvers.termselector.ExpandedLearner.lc
org.allenai.ari.solvers.termselector.ExpandedLearner.lex
org.allenai.ari.solvers.termselector.ExpandedLearnerSVM.lc
org.allenai.ari.solvers.termselector.ExpandedLearnerSVM.lex
.... 

我必须在大写名称之前添加一个learners来重命名这些文件。例如

代码语言:javascript
复制
org.allenai.ari.solvers.termselector.BaselineLearnersurfaceForm.lex

会变到

代码语言:javascript
复制
org.allenai.ari.solvers.termselector.learners.BaselineLearnersurfaceForm.lex

还有这张

代码语言:javascript
复制
org.allenai.ari.solvers.termselector.ExpandedLearner.lc

会变到

代码语言:javascript
复制
org.allenai.ari.solvers.termselector.learners.ExpandedLearner.lc

有什么办法自动做到这一点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-28 19:18:21

代码语言:javascript
复制
for f in org.*; do
    echo mv "$f" "$( sed 's/\.\([A-Z]\)/.learner.\1/' <<< "$f" )"
done

这个短循环输出一个mv命令,该命令以所需的方式重命名文件。首先按原样运行它,当您确定它正在做您想做的事情时,移除echo并再次运行。

中间的sed位接受一个文件名($f,通过这里的字符串,所以这需要bash),并用.learner.替换大写字母后的第一个大写字母,后面跟着那个大写字母。

票数 1
EN

Stack Overflow用户

发布于 2016-06-28 19:06:04

有一个叫做rename的工具。不要与来自util-linux混淆。

它非常适合这样的任务,因为它需要一个perl表达式并相应地重命名:

代码语言:javascript
复制
perl-rename 's/(?=\.[A-Z])/.learners/' *

您可以在线玩regex。

替代您可以使用for循环和$BASH_REMATCH

代码语言:javascript
复制
for file in *; do
  [ -e "$file" ] || continue
  [[ "$file" =~ ^([^A-Z]*)(.*)$ ]]
  mv -- "$file" "${BASH_REMATCH[1]}learners.${BASH_REMATCH[2]}"
done
票数 1
EN

Stack Overflow用户

发布于 2016-06-28 19:01:20

一个非常简单的方法(如果您只需要这样做一次)是将它们ls >dummy到一个文本文件dummy中,然后在文本编辑器中使用mv xxx.yyy xxx.learners.yyy /mv xxx.yyy xxx.learners.yyy来创建表单mv xxx.yyy xxx.learners.yyy的行。然后,您可以使用./dummy简单地执行结果文件。

确切的查找/替换命令取决于您使用的文本编辑器,但如下所示

  1. org.替换为mv org.。这让你在一开始就获得了mv
  2. mv org.allenai.ari.solvers.termselector.$1替换为mv org.allenai.ari.solvers.termselector.$1 org.allenai.ari.solvers.termselector.learner.$1以复制文件名并插入learner

还有一个for语法,它可能在一行(long)中完成,但我无法解释它--如果您想了解它,请尝试help for

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38084122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档