我想将.hg_gg
中的所有/var/www
个文件夹重命名为.hg
。我该怎么做?
我知道如何将.hg
重命名为.hg_gg
。
find /var/www -name ".hg" -exec bash -c 'mv $0 $0_gg' {} \;
但不知道如何进行逆向更改。
答案 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