我有一堆文件(超过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有什么办法自动做到这一点吗?
发布于 2016-06-28 19:18:21
for f in org.*; do
echo mv "$f" "$( sed 's/\.\([A-Z]\)/.learner.\1/' <<< "$f" )"
done这个短循环输出一个mv命令,该命令以所需的方式重命名文件。首先按原样运行它,当您确定它正在做您想做的事情时,移除echo并再次运行。
中间的sed位接受一个文件名($f,通过这里的字符串,所以这需要bash),并用.learner.替换大写字母后的第一个大写字母,后面跟着那个大写字母。
发布于 2016-06-28 19:06:04
有一个叫做rename的工具。不要与来自util-linux混淆。
它非常适合这样的任务,因为它需要一个perl表达式并相应地重命名:
perl-rename 's/(?=\.[A-Z])/.learners/' *替代您可以使用for循环和$BASH_REMATCH
for file in *; do
[ -e "$file" ] || continue
[[ "$file" =~ ^([^A-Z]*)(.*)$ ]]
mv -- "$file" "${BASH_REMATCH[1]}learners.${BASH_REMATCH[2]}"
done发布于 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简单地执行结果文件。
确切的查找/替换命令取决于您使用的文本编辑器,但如下所示
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语法,它可能在一行(long)中完成,但我无法解释它--如果您想了解它,请尝试help for。
https://stackoverflow.com/questions/38084122
复制相似问题