我正在使用在ubuntu中可用的rename:
$ rename --version
/usr/bin/rename using File::Rename version 0.20我的目录是这样的:
$ tree .
.
├── awp-3
├── bar
│ └── wp-2
└── wp-foo
└── wp-1我的目标是将所有文件和文件夹重命名为,前缀为wp-为static-。
我就是这么跑的:
$ shopt -s globstar
$ rename -n 's/wp-/static-/' **
rename(awp-3, astatic-3)
rename(bar/wp-2, bar/static-2)
rename(wp-foo, static-foo)
rename(wp-foo/wp-1, static-foo/wp-1)这是几乎我想要的。文件awp-3不应该被重命名。
所以我就这么做了:
$ rename -n 's/^wp-/static-/' **
rename(wp-foo, static-foo)
rename(wp-foo/wp-1, static-foo/wp-1)由于某些原因,这没有更改wp-1或wp-2的文件名。
如何使用重命名将wp-2、wp-foo和wp-1更改为静态-*
发布于 2019-01-14 06:04:53
^锚点只匹配行的开头。我猜你想
rename -n 's%(^|/)wp-%$1static-%' **另一种加强这一点的方法是说,wp必须只发生在一个单词边界附近。
rename -n 's/\bwp-/static-/' **发布于 2019-01-15 09:42:18
使用rename递归地重命名文件是有问题的:您必须确保在重命名父目录之前首先重命名内部文件/子目录。简单地添加/g修饰符来重命名所有级别(例如,从s!(^|/)wp-!$1static-!g到rename(wp-foo/wp-1,static-foo/static-1) )将无法工作。
最好使用支持递归操作的工具,如波尔姆。我建议使用基于perl的工具,因为rename也是一个基于perl的工具,它们的工作方式类似。不幸的是,还没有用于perlmv的Debian/Ubuntu包,因此您需要通过CPAN客户端(例如cpanm -n App::perlmv)安装它。一旦你有了perlmv
% perlmv -R -de 's/^wp-/static-/' *结果:
% tree .
.
├── awp-3
├── bar
│ └── static-2
└── static-foo
└── static-1备注:
**,只需使用*。-R用于递归。perlmv中的试运行模式是-d而不是-n。一旦您看到perlmv可以做您想做的事情,您就可以省略-d,或者用-v (详细)替换它。-e。https://stackoverflow.com/questions/54176291
复制相似问题