递归重命名文件linux,linux - 在ubuntu/bash下递归重命名文件和目录 - Ubuntu问答

问题描述

我想将所有包含单词”special”的文件和目录重命名为”regular”。它应保持区分大小写,以便”Special”不会成为”regular”。

如何在bash中递归执行此操作?

最佳思路

尝试执行此操作(要求bash --version> = 4):

shopt -s globstar

rename -n 's/special/regular/' **

测试正常时,请卸下-n开关

还有其他相同名称的工具可能无法执行此操作,因此请小心。

0d92c5feb5abb4695cba0f92911baae0.png

如果运行以下命令(GNU)

$ file "$(readlink -f "$(type -p rename)")"

结果是

.../rename: Perl script, ASCII text executable

并且不包含:

ELF

那么这似乎是正确的工具=)

如果不是这样,则将其设置为Debian和诸如Ubuntu之类的派生类的默认值(通常是这种情况):

$ sudo update-alternatives --set rename /path/to/rename

(将/path/to/rename替换为perl's rename命令的路径。

如果没有此命令,请搜索软件包管理器以进行安装或do it manually

最后但并非最不重要的一点是,该工具最初是由Perl的父亲Larry Wall编写的。

次佳思路

使用find的解决方案:

仅重命名文件:

find /your/target/path/ -type f -exec rename 's/special/regular/' '{}' \;

仅重命名目录:

find /your/target/path/ -type d -execdir rename 's/special/regular/' '{}' \+

重命名文件和目录:

find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+

第三种思路

如果您不介意安装其他工具,则可以使用rnm:

rnm -rs '/special/regular/g' -dp -1 *

它将遍历所有目录/sub-directories(由于-dp -1),并在名称中将常规替换为special。

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值