一般来说在linux/unix下命令行更强大, windows上可以装cygwin来模拟各种命令的执行.
比如我们的目标是将当前目录中的所有的org文件夹改名为com, 包括子目录中的文件夹.
我们一步一步来.
find . -name org
这个命令可以列出当前目录中所有的org文件的路径, 注意org是可以看成是文件的.
接下来我们将输出作为下一个命令的输入, 在它们之间加上管道符号|
就可以了
find . -name org | awk -F "/" 'for(i=1;i<NF;++i) printf("%s/",$i);printf "\n"}'
注意不要换行, 文章里面的代码可能因为宽度不够换行, 实际输入是不换行的.
我们在管道符后面加的命令意思是用/
分割前面的结果, 然后把除最后一个片段外的东西原样输出.
比如之前是./src/java/org
就会变成./src/java/
接下来我们再接一个管道符.
find . -name org | awk -F "/" 'for(i=1;i<NF;++i) printf("%s/",$i);printf "\n"}' | xargs -i mv {}org {}com
xargs
后面的-i
(也有可能是-l
, 自己可以试一下), 可以让我们用{}
来代替前面的单行结果, 注意每行都会被它执行一遍, 我们只需要考虑一行的结果就行了, 后面的mv
就是改名了, 这里{}
代表我们前面得到的结果, 我们代入一下就可以知道它执行的是:
mv ./src/java/org ./src/java/com
其实就是改名的操作, 只不过这是我们让shell自己找到所有要改的文件, 然后分别执行这个操作.
命令是活的, 许多组合方式有意想不到的功能.