Brename - 一个便捷跨平台批重命名文件/目录的命令行小工具

brename是用Go编程语言实现的,支持跨平台Linxu和Windows用户使用。Github地址

有以下几大特色:

  • 跨平台,支持WIndows,Mac OS X 和Linux
  • 安全 (通过检测潜在的冲突和错误)
  • 支持撤销
  • 可以检测到覆盖,用户可以选择是覆盖还是不覆盖。
  • 文件筛选,支持通过正则表达式来包括和排除文件。不需要去跑类似find ./ -name "*.html" -exec CMD这样的命令
  • 通过键值对文件来重命名匹配
  • 通过升序整数重命名。
  • 递归地重命名文件和目录。
  • 支持演练模式
  • 带有色彩输出结果

安装

i

Linux用户

·下载安装包之后,将软件放置环境变量即可

mkdir -p $HOME/bin/; cp brename $HOME/bin/

Windows用户

根据自己的操作系统下载安装包,然后复制brename.exe 到 C:\WINDOWS\system32路径之下即可.

参数

-d, --dry-run                   重命名操作但是不执行(预览)
-F, --exclude-filters strings   排除文件过滤器(正则表达式,而不是通配符)。支持多个值,例如-F”。html“- f”。但注意:过滤器中的逗号被视为多个过滤器的分隔符
-U, --force-undo                操作失败时候强制撤销
-h, --help                      帮助文档
-i, --ignore-case               忽略-p/——模式,-f/——包含过滤器和-f/——排除筛选的情况
-e, --ignore-ext                忽视文件的扩展名
-f, --include-filters strings   包含文件过滤器(正则表达式,而不是通配符)。支持多个值,例如-f”。html“- f”。但注意:过滤器中的逗号被视为多个过滤器的分隔符
-D, --including-dir             重命名目录
-K, --keep-key                  当对应键的值没有找到保持键作为值
-I, --key-capt-idx int          捕获键的变量索引(默认为1)
-m, --key-miss-repl string      替换没有对应值的键
-k, --kv-file string            当使用{kv}功能时候,通过制表符分割的键值对文件代替键
-l, --list                      只列出匹配模式路径
-a, --list-abs                  列出绝对路径,与-l/- list一起使用
-s, --list-sep string           找到的路径列表的分隔符(默认为“\n”))
--max-depth int                 递归搜索目录的最大层数
-N, --nature-sort               自然排序列出路径,与-l/- list一起使用
--nr-width int                  标记-r/-中{nr}的最小宽度。例如,将“1”格式化为“001”,通过——nr-width 3(默认为1)
--only-dir                      只重名目录
-o, --overwrite-mode int        覆盖模式(0表示报告错误,1表示覆盖,2表示没有renaming) (default 0)
-p, --pattern string            搜索模式(匹配模式)
-q, --quiet                     静默模式,不要显示信息和警告
-R, --recursive                 递归重命名
-r, --replacement string        替换。获取变量的支持。例如,$1表示第一个子匹配。注意:对于*nix操作系统,使用单引号而不是双引号或使用\转义字符。“{nr}”也支持升序整数
-n, --start-num int             使用{nr}替换时的起始编号(默认为1)
-u, --undo                      撤销上次操作
-v, --verbose int               详细级别(0表示所有,1表示警告和错误,2表示仅有错误)(默认为0)
-V, --version                   打印版本信息检查更新

示例

我们先在目录下创建以下的文件目录作为演示, 执行完每行命令后可以看【INFO】后面的提示信息文件的变化了解各个参数的功能。

$ tree example

├── abc
│   ├── A.JPEG
│   ├── B.HTM
│   └── B.JPEG
├── a.html
├── a.jpeg
└── b.jpeg
  1. (-R/--recursive):在所有的子目录中递归重命名所有的.jpeg文件为jpg

    (-d/--dry--run): 首次运行前进行安全预览模式,不会真正的执行操作.

 $ brename -p "\.jpeg" -r ".jpg" -R -d
 [INFO] main options:
 [INFO]   ignore case: false
 [INFO]   search pattern: \.jpeg
 [INFO]   include filters: .
 [INFO]   search paths: ./
 [INFO] 
 [INFO] checking: [ ok ] 'a.jpeg' -> 'a.jpg'
 [INFO] checking: [ ok ] 'b.jpeg' -> 'b.jpg'
 [INFO] 2 path(s) to be renamed

 $ brename -p "\.jpeg" -r ".jpg" -R
 [INFO] main options:
 [INFO]   ignore case: false
 [INFO]   search pattern: \.jpeg
 [INFO]   include filters: .
 [INFO]   search paths: ./
 [INFO] 
 [INFO] checking: [ ok ] 'a.jpeg' -> 'a.jpg'
 [INFO] checking: [ ok ] 'b.jpeg' -> 'b.jpg'
 [INFO] 2 path(s) to be renamed
 [INFO] renamed: 'a.jpeg' -> 'a.jpg'   
 [INFO] renamed: 'b.jpeg' -> 'b.jpg'
 [INFO] 2 path(s) renamed

 $ tree
 .
 ├── abc
 │   ├── A.JPEG
 │   ├── B.HTM
 │   └── B.JPEG
 ├── a.html
 ├── a.jpg
 └── b.jpg
  1. (-u/--undo):撤销上次成功的操作
 $ brename -u
 [INFO] rename back: 'b.jpg' -> 'b.jpeg'
 [INFO] rename back: 'a.jpg' -> 'a.jpeg'
 [INFO] 2 path(s) renamed
  1. (-v/--verbose): 预览并且只展示造成错误的操作
 # default value of -v is 0
 $ brename -p a -r b -R -D -d
 [INFO] checking: [ ok ] 'a.html' -> 'b.html'
 [ERRO] checking: [ new path existed ] 'a.jpg' -> 'b.jpg'
 [INFO] checking: [ ok ] 'abc' -> 'bbc'
 [ERRO] 1 potential error(s) detected, please check

 $ brename -p a -r b -R -D -d -v 2
 [ERRO] checking: [ new path existed ] 'a.jpg' -> 'b.jpg'
 [ERRO] 1 potential error(s) detected, please check
  1. (-i/--ignore--case): 忽视大小写
 $ brename -p "\.jpeg" -r ".jpg" -R -i
 [INFO] checking: [ ok ] 'abc/A.JPEG' -> 'abc/A.jpg'
 [INFO] checking: [ ok ] 'abc/B.JPEG' -> 'abc/B.jpg'
 [INFO] 2 path(s) to be renamed
 [INFO] renamed: 'abc/A.JPEG' -> 'abc/A.jpg'
 [INFO] renamed: 'abc/B.JPEG' -> 'abc/B.jpg'
 [INFO] 2 path(s) renamed
 
 
 $ tree
 .
 ├── abc
 │   ├── A.jpg
 │   ├── B.HTM
 │   └── B.jpg
 ├── a.html
 ├── a.jpg
 └── b.jpg
  1. 使用捕获变量,比如,2....
 $ brename -p "(a)" -r "\$1\$1" -i
 [INFO] checking: [ ok ] 'a.html' -> 'aa.html'
 [INFO] checking: [ ok ] 'a.jpg' -> 'aa.jpg'
 [INFO] 2 path(s) to be renamed
 [INFO] renamed: 'a.html' -> 'aa.html'
 [INFO] renamed: 'a.jpg' -> 'aa.jpg'
 [INFO] 2 path(s) renamed

 $ tree
 .
 ├── aa.html
 ├── aa.jpg
 ├── abc
 │   ├── A.jpg
 │   ├── B.HTM
 │   └── B.jpg
 └── b.jpg
  1. (-D/--including-dir):重命名目录,也可以使用(-D --only-dir)只重命名目录
 $ brename -p "a" -r "A" -R -D
 [INFO] checking: [ ok ] 'aa.html' -> 'AA.html'
 [INFO] checking: [ ok ] 'aa.jpg' -> 'AA.jpg'
 [INFO] checking: [ ok ] 'abc' -> 'Abc'
 [INFO] 3 path(s) to be renamed
 [INFO] renamed: 'aa.html' -> 'AA.html'
 [INFO] renamed: 'aa.jpg' -> 'AA.jpg'
 [INFO] renamed: 'abc' -> 'Abc'
 [INFO] 3 path(s) renamed

 $ tree
 .
 ├── AA.html
 ├── AA.jpg
 ├── Abc
 │   ├── A.jpg
 │   ├── B.HTM
 │   └── B.jpg
 └── b.jpg
  1. (-f/--include-filters)(-F/--exclude-filters): 通过正则表达式只重命名特别的文件
 $ brename -p '(.)' -r '$1 ' -d -f '\.jpg$'  # 只重命名.jpg文件
 [INFO] main options:
 [INFO]   ignore case: false
 [INFO]   search pattern: (.)
 [INFO]   include filters: \.jpg$
 [INFO]   search paths: ./
 [INFO] 
 [INFO] checking: [ ok ] 'AA.jpg' -> 'A A . j p g '
 [INFO] checking: [ ok ] 'b.jpg' -> 'b . j p g '
 [INFO] 2 path(s) to be renamed
 
  $ brename -p '(.)' -r '$1 ' -d -F '\.html$'
 [INFO] checking: [ ok ] 'AA.jpg' -> 'A A . j p g '
 [INFO] checking: [ ok ] 'b.jpg' -> 'b . j p g '
 [INFO] 2 path(s) to be renamed

注意(-f/--include-filters)(-F/--exclude-filters)应该是正则表达式,不是通配符!!

  1. (-e/--ignore-ext): 不改变文件的扩展名
$ brename -p '(.)' -r '$1 ' -d -e
 [INFO] checking: [ ok ] 'AA.jpg' -> 'A A .jpg'
 [INFO] checking: [ ok ] 'b.jpg' -> 'b .jpg'
 [INFO] checking: [ ok ] 'hello AA.html' -> 'h e l l o   A A .html'
 [INFO] 3 path(s) to be renamed
  1. -r{nr}: 用数字重命名
$ brename -d -p '(.+)\.' -r 'pic-{nr}.' -f .jpg -d
 [INFO] checking: [ ok ] 'AA.jpg' -> 'pic-1.jpg'
 [INFO] checking: [ ok ] 'b.jpg' -> 'pic-2.jpg'
 [INFO] 2 path(s) to be renamed

# 设置起始数字
 $ brename -d -p '(.+)\.' -r 'pic-{nr}.' -f .jpg -d --nr-width 3 --start-num 11 
 [INFO] checking: [ ok ] 'AA.jpg' -> 'pic-011.jpg'
 [INFO] checking: [ ok ] 'b.jpg' -> 'pic-012.jpg'
 [INFO] 2 path(s) to be renamed
  1. (-k/--kv-file): 通过以制表符分隔的键-值文件将子匹配替换为相应的值
 $ more kv.tsv
 a       一
 b       二
 c       三

 $ brename -p '^(\w)' -r '{kv}' -k kv.tsv -K -i -d
 [INFO] read key-value file: kv.tsv
 [INFO] 3 pairs of key-value loaded
 [INFO] checking: [ ok ] 'AA.jpg' -> '一A.jpg'
 [INFO] checking: [ ok ] 'b.jpg' -> '二.jpg'
 [WARN] checking: [ unchanged ] 'hello b.html' -> 'hello b.html'
 [WARN] checking: [ unchanged ] 'kv.tsv' -> 'kv.tsv'
  1. 自动创建目录
 $ brename -f .txt -p '-' -r '/'
 [INFO] checking: [ ok ] 'a-b-c.txt' -> 'a/b/c.txt'
 [INFO] 1 path(s) to be renamed
 [INFO] renamed: 'a-b-c.txt' -> 'a/b/c.txt'
 [INFO] 1 path(s) renamed

 $ tree a
 a
 └── b
     └── c.txt

真实数据举例

  1. 假设我们目录下方有这么些个fasta数据文件,还有一个barcode.tsv文件。
 $ tree
 .
 ├── barcodes.tsv
 ├── tag_ATGCGTA.fasta
 ├── tag_CCCCCCC.fasta
 ├── tag_CGACGTC.fasta
 ├── tag_TCATAGC.fasta
 └── tag_TCTATAG.fasta
  1. 目录下的barcode.tsv文件是一个制表符分割的有着对应关系的文件,注意CCCCCCC不在其中。
 $ cat barcodes.tsv
 CGACGTC S1
 ATGCGTA S2
 TCTATAG S4
 TCATAGC S3
  1. 现在开始重命名这些fasta文件,标记unkonwn不存在的标签。
 $ brename -e -p 'tag_(\w+)' -r '{kv}' -k barcodes.tsv -m unknown -d
 [INFO] read key-value file: barcodes.tsv
 [INFO] 4 pairs of key-value loaded
 [INFO] checking: [ ok ] 'tag_ATGCGTA.fasta' -> 'S2.fasta'
 [INFO] checking: [ ok ] 'tag_CCCCCCC.fasta' -> 'unknown.fasta'
 [INFO] checking: [ ok ] 'tag_CGACGTC.fasta' -> 'S1.fasta'
 [INFO] checking: [ ok ] 'tag_TCATAGC.fasta' -> 'S3.fasta'
 [INFO] checking: [ ok ] 'tag_TCTATAG.fasta' -> 'S4.fasta'
 [INFO] 5 path(s) to be renamed

现在我们可以看到含有这些字母的fasta文件全部都替换成了barcode.tsv文件里对应的值了,是不是超级方便呢~~ 我们知道有时候公司返回的数据有时候都是长长的字母标识,甚至有的还无规律,导致我们得一个个手动重命名,有了这个工具只需要准备一个文件输入一行代码就可轻松搞定,可大大提高我们的工作效率~~ 赶紧体验下吧!

你可能感兴趣的:(Brename - 一个便捷跨平台批重命名文件/目录的命令行小工具)