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