Linux/Mac下命令行批量修改文件夹名

一般来说在linux/unix下命令行更强大, windows上可以装cygwin来模拟各种命令的执行.
比如我们的目标是将当前目录中的所有的org文件夹改名为com, 包括子目录中的文件夹.
我们一步一步来.

find . -name org

这个命令可以列出当前目录中所有的org文件的路径, 注意org是可以看成是文件的.
接下来我们将输出作为下一个命令的输入, 在它们之间加上管道符号|就可以了

find . -name org | awk -F "/" 'for(i=1;i"%s/",$i);printf "\n"}'

注意不要换行, 文章里面的代码可能因为宽度不够换行, 实际输入是不换行的.
我们在管道符后面加的命令意思是用/分割前面的结果, 然后把除最后一个片段外的东西原样输出.
比如之前是./src/java/org就会变成./src/java/
接下来我们再接一个管道符.

find . -name org | awk -F "/" 'for(i=1;i"%s/",$i);printf "\n"}' | xargs -i mv {}org {}com

xargs后面的-i(也有可能是-l, 自己可以试一下), 可以让我们用{}来代替前面的单行结果, 注意每行都会被它执行一遍, 我们只需要考虑一行的结果就行了, 后面的mv就是改名了, 这里{}代表我们前面得到的结果, 我们代入一下就可以知道它执行的是:

mv ./src/java/org ./src/java/com

其实就是改名的操作, 只不过这是我们让shell自己找到所有要改的文件, 然后分别执行这个操作.
命令是活的, 许多组合方式有意想不到的功能.

你可能感兴趣的:(Linux)