2014-02-06 97 views
0

我期待重新命名名称开头RR,谁没有自己的子目录“A”叶重命名与子目录名称在RR

+0

为什么'ocaml'标签出现?困难的部分是确定哪些目录是叶节点;其余的都很简单。如果您不必为目录名称中的换行烦恼,那么'sort -r'会在拥有它们的目录之前为您提供子目录;和'find -depth'也是这样。 –

+0

我希望能在OCaml中找到一个解决方案,但是我对任何东西都是开放的。 – JamHam

+0

这种尝试给了我一个非法选项--m,有什么想法? find -mindepth 2 -maxdepth 2 -type d |同时阅读dir; do mv -T“$ dir”“'dirname”$ dir“'/'basename”$ dir“| sed”s/[rR]。* $/MIC_A/i“'”;完成 – JamHam

回答

1

,如果glob通配符没有按”所有子目录开始t匹配任何它只会打印通配符本身,例如如果/somedir/没有任何子目录,则扩展后的/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在同一目录下。

+0

我收到一个错误 sh fix.sh fix.sh:line 6:语法错误附近出现意外的标记'<' fix.sh:line 6:'done <<(find。-type d)' – JamHam

+0

我指望没有任何其他R文件夹,但那不是一个真正的计划 – JamHam

+0

@JamHam确保你将它运行为'/ bin/bash scriptname'而不是'/ bin/sh scriptname' – BroSlow