命令参数
bash特殊参数
command !$ 执行后!$把上个命令最后的参数作为输入
bash shell命令
切换目录命令cd
cd [目录名] :切换当前目录至dirName (Change the current directory to DIR) 1. cd / 进入系统根目录 2. cd .. 返回上一级目录 3. cd ~ 或cd 当前用户主目录 (注意:“当前用户主目录”和“系统根目录”是两个不同的概念) 4. cd - 返回进入此目录之前所在的目录
创建文件命令touch
touch myproject/settings/{__init.py,dev.py,prod.py,test.py}
Note:{...}可以创建多个文件
echo命令
echosh是Linux Bash和C Shell最常使用的内置命令资源,通常用在脚本语言或批处理文件在标准输出或者文件显示一行文本或者字符串。
find命令
Linux grep命令
linux vi vim命令、快捷键
GCC 命令详解
bash命令的应用
将当前文件夹中的所有子文件夹中的文件剪切到当前文件夹中
for dir in $(ls)
do
# echo $dir
if [ -d $dir -a "$(ls -A $dir)" ];then
mv ./$dir/* .
fi
done
Note:
1. [ ]内每个组件之间都要有空格,包括[ -d 和 " ]
2. 判断dir文件是否为目录 && 判断dir文件夹是否为空
将当前文件夹中所有子文件夹中的.bak文件全部删除
find . -name "*.bak" -exec rm {} \;
Note:
1. find参数只支持通配符,不支持正则表达式
2. -name参数可以用'', 即'*.bak'
把该文件夹下的所有jpg文件转成png格式
普通青年用for循环 (代码未测试)
forfn in *.jpg; doconvert "$fn" `echo $fn | sed 's/jpg$/png/'`; done
文艺青年用xargs来写(代码未测试):
ls *.jpg | xargs -I{} convert "{}" `echo {} | sed 's/jpg$/png/'` 好像没什么区别?
现在你的电脑有8个核,想要同时转换格式。for或者一般的shell就傻逼了,难道要用python/multiprocessing甚至开C++/OpenMP写段小程序?
xargs有个逆天的参数-P:
ls *.jpg | xargs -I{} -P 8 convert "{}" `echo {} | sed 's/jpg$/png/'` 执行的效果是,电脑会自动读前8个文件进来,转换格式。这8个进程里任何一个执行结束后,会自动读取下一个文件,保证始终有8个进程在执行,直到所有任务执行完毕。这简直是各种并行处理的大杀器。
如果有多台机器怎么办呢?xargs可以在多台机器上自动并行吗?穿个马甲就好啦。
ls *.jpg | parallel -I{} -S 32/m{1..4} convert "{}" `echo {} | sed 's/jpg$/png/'` 这个的意思是在名字是m1, m2, m3和m4的4台机器上并行处理,每个机器跑32个进程。这样parallel就会自动监视每个机器的运行情况,谁家CPU负载低了就自动分配给它其他任务,保证吞吐量。(当然parallel还没有智能到自动传输数据的程度,但这个可以用NFS等轻松解决)
效果:
AWS上面只要1美元一小时,用我的脚本5分钟轻松搞出来128核cluster
[http://www.zhihu.com/question/29257300/answer/43814464?utm_source=weibo&utm_medium=weibo_share&utm_content=share_answer&utm_campaign=share_button]
Note:还有一种方法(未测试)
find . -name "*.txt" -type f -exec rename 's/.txt$/$/g' {} \;
提取某个文件夹下所有文件的文件名
cd /c/Users/pi/Desktop
ls /e/mine/java_workspace/AMC_master/Data/Input/1000Reviews/Electronics > filenames.txt
Note:相应windows下的命令为
@echo off
dir /b E:\mine\java_workspace\AMC_master\Data\Input\1000Reviews\Electronics > filenames.txt
exit
windows下执行linux shell命令和脚本文件
可以使用git bash(下载安装git)
亲测可以执行sh脚本文件
Note:命令行工具Git Bash还集成到了Windows的资源管理器中,在文件夹上右键,可以点击Git Bash Here和Git GUI Here快速启动Git并自动切换到指定的文件夹.