Linux查找文件夹并重命名

时间:2013-12-11 16:30:36

标签: linux bash ubuntu

我想将.hg_gg中的所有/var/www个文件夹重命名为.hg。我该怎么做? 我知道如何将.hg重命名为.hg_gg

find /var/www -name ".hg" -exec bash -c 'mv $0 $0_gg' {} \;

但不知道如何进行逆向更改。

3 个答案:

答案 0 :(得分:7)

试试这个:

find /var/www -name ".hg_gg" -execdir bash -c 'mv {} .hg' \;

您需要使用find定义的特殊语法:{}是当前文件名的占位符。检查man page。使用-execdir代替-exec 重要也是如此。 execdir将当前工作目录更改为找到的目录所在的文件夹。否则它将执行类似mv /var/www/.hg_gg ./.hg

的操作

只有使用-type d限制查找才能查找文件夹时,您可以加快速度:

find /var/www -type d -name ".hg_gg" -execdir bash -c 'mv {} .hg' \;

答案 1 :(得分:4)

使用-execdir-prune选项考虑此查找命令:

find /var/www/ -type d -name ".hg_gg" -execdir mv '{}' '.gg' \; -prune
  • -execdir将在每个子目录中执行命令
  • -prune导致find不会进入当前文件

答案 2 :(得分:3)

不是一个班轮,但你可以这样做:

for file in `find /var/www -name ".hg_gg"`; do
    mv $file `echo $file | sed 's/hg_gg$/hg/'`
done