如何使用特定名称重命名所有子文件夹


1

如何浏览所有子文件夹并将名为“Old”的所有文件夹重命名为“New”

Answers:


1

如果你有zsh

autoload zmv
zmv -QW '**/Old(/)' '**/New'
zmv -W'** / Old''** / New'

这里autoload zmv加载zmvzsh附带的脚本; zmv -W pattern replacement表示«为每个匹配记住所有通配符的值patternreplacement用此值替换相应的通配符»; zmv -Q意味着«允许模式中的全局限定符»; '**/Old'表示«匹配当前目录下树中名为«Old»的所有文件»并且(/)glob限定符将«所有文件»限制为仅目录。其他有用的zmv选择:

  • -n:什么都不做,只打印将要做的事情。
  • -i:显示要执行的每一行并询问是否执行它
  • -f:强制覆盖目标文件

如果你更喜欢[ba] sh:

RnAll() { for f in "$1"/* ; do [ -d "$f" ] || continue ; ( RnAll "$f" "$2" "$3" ) ; [ "`basename $f`" \== "$2" ] && mv "$f" "`dirname $f`/$3" ; done }
RnAll . Old New

这几乎是纯粹的sh(或至少是bash)解决方案,除了shell和coreutils之外不需要任何东西。


1

像这样的东西:

find . -type d -exec rename <rename options> \;

重命名选项将根据rename您的具体情况而有所不同。Red Hat重命名使用rename Old New {},而Debian / Ubuntu系统经常使用“Perl rename”,它将使用以下语法:

rename 's/^Old$/New/' {} 

这只会改变“旧”的完全匹配; 使用s/Old/New/g,如果你想改变“老”到“新”的所有occurrances,其中一个文件夹名称中的多个occurrances。


Debian / Ubuntu系统经常使用“Perl rename”,它将使用以下语法:rename 's/^Old$/New/' {}...只会改变“Old”的完全匹配; 使用s/Old/New/g,如果你想改变“老”到“新”的所有occurrances,其中一个文件夹名称中的多个occurrances。
quack quixote 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.