时常出现一些特定需求,然后就一边看man page,一边尝试,最终写出一些复杂的命令,短时间内往往只使用一次,隔N久后又使用时,就忘记怎么写了,然后又查man page,让人郁闷。 多数时候只是不确定是否要加转义斜线。专门罗列出来,做个笔记,方便速查很有必要。
find res/ scripts/ -newer package.zip | xargs -i zip new_package.zip '{}' -x \*.swp \*.bak \*.tmp
解释:
将res和scripts目录中更新过的文件打包为zip文件,剔除扩展名为swp、bak、tmp。find还支持其他一些控制查询时间区间的参数, 这对于在大量的配置文件中查找哪些是近两天修改过的,非常有用:
find . -cmin +30
find . -cmin -10
find . -ctime +30
find . -ctime -10
find . -cnewer abc.txt
解释:
第一个表示查找修改(change)时间大于最近30分钟的文件;第二个表示查找修改时间在近10分钟内的文件; 第三个表示查找修改时间大于30天的文件;第四个表示修改时间在近10天内的文件; 第五个表示查找修改时间比abc.txt的修改时间新的文件。
Linux上,使用stat abc.txt
命令可以查看文件的详细信息,其中就包括了access time,modify time,change time, 有读取文件,access time就会更新,只是修改文件属性(例如:添加可执行属性),那么change time会更新, 如果修改了文件内容,那么modify time和change time都会更新。可见英文里,change比modify含义更广。
最近学习quick cocos2dx手机游戏开始,发现使用上面的命令,外加python -m SimpleHTTPSever
可迅速构建一个提供游戏版本更新的server服务端。
find . -size +365000k -a \( -name '*.bin' -o -name '*.ind2' \)
解释:
查找文件大小大于365M的文件,且名字符合*.bin
或者*.indz2
,这里-a
等于-and
,-o
等于-or
,\(
后的空格和\)
前的空格不能省略。
ls *.cpp | xargs wc -l | awk '{if ($1 > 5000) print $1, " ", $2 fi}'
解释:
找出代码行数大于5000行的cpp文件,更复杂的awk使用参见Awk常用命令笔记。
sed -n '50000,50100p' output.log
sed -n '50000,+100p' output.log
解释:
输出50000行开始的100行,两条命令等价,对于日志中追查问题非常有用。
:w !sudo tee %
解释:
ubuntu下vim里编辑文件,保存时权限不够,可以选择先保存到/tmp/
目录下,再切换root从/tmp/
把文件mv
回来,更简单的方便是使用如上命令, 在不退出vim的条件下,切换root保存文件。%
在vim里代表文件名,tee
命令作用就是创建一个文件,并将终端输入内容保存到文件里, tee test2.cpp < test.cpp
可以等同于mv test.cpp test2.cpp
ctrl+z
bg 1 && disown -h %1
解释:
前台程序换到后台运行,退出终端时,程序继续运行。bg
用于让后台任务继续运行,disown
是指定某任务忽略SIGHUP信号,相当于nohup。
alias cppgrep="find . -name '*.cpp' -or -name '*.h' | awk '{ gsub(" ", "\ "); print }' | xargs grep --color"
解释:
经常需要在一堆c++源码中grep查找,alias出一个cppgrep会加快工作。特别注意,这里使用awk将空格替换成斜杠空格,是解决文件名中有空格的情况。