我批如何能预先计划一年移动到文件名末尾?(How can I batch move a prepen

2019-06-27 02:46发布

我所拥有的文件(几千条)这样的列表:

/path/2010 - filename.txt
/path/2011 - another file name.txt

始终遵循这个模式: #### - string.txt

我需要改变他们看起来像这样:

/path/filename (2010).txt
/path/another file name (2011).txt

我如何使用bash,外壳,终端等迅速做到这一点?

Answer 1:

未经测试。

find /path -name '???? - *.txt' -print0 | while read -d ''; do
    [[ $REPLY =~ (.*)/(....)\ -\ (.*)\.txt$ ]] || continue

    path=${BASH_REMATCH[1]}
    year=${BASH_REMATCH[2]}
    str=${BASH_REMATCH[3]}
    echo mv "$REPLY" "$path/$str ($year).txt"
done

删除echo一旦产生mv命令看的权利。



Answer 2:

尝试rename命令:

rename -n 's/(.*) - (.*)(\.txt)/$2 ($1)$3/' *.txt

-n (--no-ACT)选项进行预览。
除去-n来执行替换。



Answer 3:

我知道你没有带标记它zsh但你没有说的shell 。 反正这里是如何用做zmv在功能上zsh

autoload zmv                      # It's not loaded by default
zmv -nvw '* - *.*' '$2 ($1).$3'

删除-n当你满意的输出。

-v使得zmv冗长。 -w隐含使一个组的每个通配符。



Answer 4:

我更愿意将其添加为评论,但我还没有获准。

我问过类似的问题,并获得了很多有用的答案在这里:

https://unix.stackexchange.com/questions/37355/recursively-rename-subdirectories-that-match-a-regex

也许这些解决方案中的一个可以调整,以适应您的需求。



文章来源: How can I batch move a prepended year to the end of a file name?