作为程序员,调查bug,查看日记是每天必需的工作。下面是几个常用的命令及其组合用法。
- 查找某个目录下以所有的json文件
find . -type f -name '*.json'
- 查看包含某些字符串的所有的文件
find . -type f -name *.json | xargs grep "sqls"
这里xargs不能省略,有xargs表示grep文件的内容包含sqls。 如果不带xargs,则表示查找文件名本身包含sqls的文件。
xargs 在这里的作用是将管道的输出的结果转换成一个参数List,然后对List里面的每个参数调用同一个命令,在这里就是grep,所以最后的执行命令是:
grep "sqls" file1.json
grep "sqls" file2.json
...
...
grep "sqls" filen.json
xargs 可以解决某些Unix命令不支持参数过长的问题,比如rm, 如果它后面跟一个很长的参数列表,就会报“参数列表过长”而无法继续执行。所以也可以xargs来解决:
find /path -type f -print0 | xargs -0 rm
xargs结合find来使用的时候还有一个问题,默认xargs用空白字符来分割参数列表,所以如果find的结果有一些文件的路径或者名字包含空白字符,那么这个文件路径就会被分割成多个问题,比如/home/test/My Blog/content1.json 经过xargs处理之后就会被分割成/home/test/My 和Blog/content1.json,这样再作为其它的命令的输入就有“file not found”这些问题。
这里我们可以通过xargs的分割符delimiter来,比如上面的-0参数就是指定用null字符来分割参数列表,但这也需要find的结果也需要以null字符而不是回车、换行符,上面的-print0就是指命令的输出以null间隔开。通常find的-print0参数跟xargs的-0是结合着使用