替换目录中文件名的子字符串

替换目录中文件名的子字符串

存在一个目录,该目录包含多层子目录。在这些目录下,有一组文件,其名称包含一个常用单词,例如.cc.如何将.cc这些文件名称中的 替换为.cpp

答案1

当您说文件“名称包含常用词”时,我假设您指的是它们共享扩展名的事实.cc:如果是这样,请使用吉尔斯的回答在这里您可以构建一个命令来实现您的目标:

 find -type f -exec sh -c '
    for file; do [ "${file##*.}" = "cc" ] && 
    mv -- "$file" "${file%.cc}.ccp"; done
    ' -- {} +

这个答案关于SO了解更多详情

答案2

在 zsh 中:

autoload zmv
zmv '(**/)(*).cc' '$1$2.cpp'

在 bash ≥4 中:

for x in **/*.cc; do mv "$x" "${x%.cc}.cpp"; done

在任何外壳中:

find -name '*.cc' -exec sh -c 'for x; do mv "$x" "${x%.cc}.cpp"; done' _ {} +

更简单,并且可以移植到旧系统,但速度稍慢:

find -name '*.cc' -exec sh -c 'mv "$0" "${0%.cc}.cpp"' {} \;

请参阅此答案以获取解释。

相关内容