Bash 自动重命名文件

Bash 自动重命名文件,bash,terminal,Bash,Terminal,我有一堆关于这个的文件(超过1000个),如下所示 $ 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 or

我有一堆关于这个的文件(超过1000个),如下所示

$ 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
来重命名这些文件。比如说

org.allenai.ari.solvers.termselector.BaselineLearnersurfaceForm.lex
将更改为

org.allenai.ari.solvers.termselector.learners.BaselineLearnersurfaceForm.lex
这个呢

org.allenai.ari.solvers.termselector.ExpandedLearner.lc
将更改为

org.allenai.ari.solvers.termselector.learners.ExpandedLearner.lc
有没有办法自动做到这一点

一种非常简单的方法(如果您只需要执行一次操作,则非常有用)是
ls>dummy
将它们放入一个文本文件
dummy
,然后在文本编辑器中使用find/replace创建
mv xxx.yyy xxx.learners.yy
格式的行。然后,您可以使用
/dummy
简单地执行结果文件

确切的查找/替换命令取决于您使用的文本编辑器,但类似于

  • org.
    替换为
    mv-org.
    。这将在开始时为您提供
    mv
  • mv org.allenai.ari.solvers.termselector.$1
    替换为
    mv org.allenai.ari.solvers.termselector.$1 org.allenai.ari.solvers.termselector.learner.$1
    以复制文件名并插入
    learner
  • 还有一种语法是
    for
    ,它可能只需要一行(很长),但我无法解释它-如果您想了解它,请尝试
    help for

    一种非常简单的方法(如果您只需要做一次),就是
    ls>将它们虚拟成一个文本文件
    dummy
    ,然后在文本编辑器中使用find/replace以
    mv xxx.yyy xxx.learners.yyy
    的形式生成行。然后,您可以使用
    /dummy
    简单地执行结果文件

    确切的查找/替换命令取决于您使用的文本编辑器,但类似于

  • org.
    替换为
    mv-org.
    。这将在开始时为您提供
    mv
  • mv org.allenai.ari.solvers.termselector.$1
    替换为
    mv org.allenai.ari.solvers.termselector.$1 org.allenai.ari.solvers.termselector.learner.$1
    以复制文件名并插入
    learner
  • 还有一种语法是
    for
    ,它可以在一行(长)中完成,但我无法解释它-如果您想了解它,请尝试
    帮助。不可混淆

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

    perl-rename 's/(?=\.[A-Z])/.learners/' *
    

    您可以选择for循环和
    $BASH\u重新匹配:

    for file in *; do
      [ -e "$file" ] || continue
      [[ "$file" =~ ^([^A-Z]*)(.*)$ ]]
      mv -- "$file" "${BASH_REMATCH[1]}learners.${BASH_REMATCH[2]}"
    done
    
    有一个工具叫做。不可混淆

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

    perl-rename 's/(?=\.[A-Z])/.learners/' *
    

    您可以选择for循环和
    $BASH\u重新匹配:

    for file in *; do
      [ -e "$file" ] || continue
      [[ "$file" =~ ^([^A-Z]*)(.*)$ ]]
      mv -- "$file" "${BASH_REMATCH[1]}learners.${BASH_REMATCH[2]}"
    done
    
    组织中f的
    。*;做
    echo mv“$f”“$(sed's/\.\([A-Z]\)/.learner.\1/'
    用于组织中的f.*;是否执行
    
    echo mv“$f”“$(sed's/\.\([A-Z]\)/.learner.\1/”我试过了,但这不是小事(至少对我来说)如何使用它的语法实现此目的。如果文件大写字母前的单词相同,您甚至不需要正则表达式。一个简单的linux重命名实用程序将完成此任务
    重命名termselector.termselector.learners.org.
    。我尝试过,但它并不简单(至少对我来说)如何将其语法用于此目的。如果文件大写字母前的单词相同,您甚至不需要regex。一个简单的linux重命名实用程序将完成此工作
    重命名termselector.termselector.learners.org.*