重命名名称以R开头的叶子

时间:2014-02-06 01:16:27

标签: shell unix terminal ocaml

我希望重命名名称以RR开头并且没有自己的子目录的所有子目录为'A'

1 个答案:

答案 0 :(得分:1)

中,如果一个glob通配符与任何东西不匹配,它只会打印通配符本身,例如:如果/somedir/没有任何子目录,则展开后 <{em> /somedir/*/的文字等同于'/somedir/*/'

因此,一个简单的bash脚本可以找到没有子目录且名称以RR开头的所有目录

#!/bin/bash

shopt -u nullglob 
while read -r dir; do
  [[ $(echo "$dir"/*/) == "$dir/*/" && ${dir##*/} =~ ^'RR' ]] && echo "$dir" 
done < <(find . -type d)

应该很容易从那里进行插值,但是当我们有多个符合您条件的目录并且不能将它们全部重命名为A时,不清楚您想要做什么?

要将RRetcetc等目录重命名为A,只需将其更改为以下内容

#!/bin/bash

shopt -u nullglob 
while read -r dir; do
  [[ $(echo "$dir"/*/) == "$dir/*/" && ${dir##*/} =~ ^'RR' ]] && mv -v "$dir" "${dir%/*}/A" 
done < <(find . -type d)

但请注意,这并未考虑在同一目录中匹配^ RR的多个目录。