【问题标题】:Change of directories names according to pattern in Bash根据 Bash 中的模式更改目录名称
【发布时间】:2021-06-08 02:10:15
【问题描述】:

我需要更改单行(最佳选项)目录名称,更精确 - 删除一些在开头 TO_BE_REMOVED_W._ 具有可变部分的前缀。_

我可以找到要修改的目录:

find ./ -type d -iname 'TO_BE_REMOVED_W*' -exec mv {} _____ \;

我应该如何形成执行部分来重命名目录以从全名中删除模式?

【问题讨论】:

  • 如果你没有rename(正如tdy建议的那样),但有zsh可用,你也可以使用内部命令zmv

标签: bash sed find one-liner


【解决方案1】:

大多数发行版都带有rename,它接受替换模式,所以我通常使用-execdirrename

例如删除PREFIX_

$ find . -execdir rename 's/^PREFIX_//' '{}' +

请注意,对于 Arch Linux,这称为 perl-rename (Arch's default rename is not the standard rename found on most distros)。

【讨论】:

    【解决方案2】:

    你可以像这样使用-exec bash -c '...'

    $ find -name 'foo*'
    ./foo-01
    ./foo-05
    ./foo-02
    ./foo-03
    ./foo-04
    $ find -name 'foo*' -exec bash -c 'file=$0; echo Now you can do anything with $file ...' {} \;
    Now you can do anything with ./foo-01 ...
    Now you can do anything with ./foo-05 ...
    Now you can do anything with ./foo-02 ...
    Now you can do anything with ./foo-03 ...
    Now you can do anything with ./foo-04 ...
    $
    

    【讨论】:

      猜你喜欢
      • 2017-06-30
      • 2015-04-18
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多