关闭

linux 高级原1

标签: linux 脚本
69人阅读 评论(0) 收藏 举报
分类:
cat的用法多种多样。让我们来看看其中的一些。
cat命令不仅可以读取文件、拼接数据,还能够从标准输入中进行读取。
从标准输入中读取需要使用管道操作符:
OUTPUT_FROM_SOME COMMANDS | cat
类似地,我们可以用cat将来自输入文件的内容与标准输入拼接在一起,将stdin和另一个
文件中的数据结合起来。方法如下:
$ echo 'Text through stdin' | cat - file.txt

在上面的代码中,-被作为stdin文本的文件名。

$ cat -s multi_blanks.txt #压缩相邻的空白行
line 1
line2
line3
line4
另外,也可以用tr删除所有的z空白行

cat有一个特性,可以将制
表符着重标记出来。该特性对排除缩进错误非常有用。用cat命令的 -T选项能够将制表符标记成
^|。例如:
$ cat file.py
def function():
var = 5
next = 6
third = 7
$ cat -T file.py
def function():
^Ivar = 5
next = 6

使用cat命令的-n选项会在输出的每一行内容之前加上行号

-n甚至会为空白行加上行号。如果你想跳过空白行,那么可以使用选项-b

2、文件查找与文件列表

find是Unix/Linux命令行工具箱中最棒的工具之一。该命令对于编写shell脚本所起到的功用不可小视

ind命令的工作方式如下:沿着文件层次结构向下遍历,匹配符合条件的文件,执行相应
的操作。

1. 根据文件名或正则表达式进行搜索
选项–name的参数指定了文件名所必须匹配的字符串。我们可以将通配符作为参数使用。
*.txt能够匹配所有以.txt结尾的文件名。选项 -print在终端中打印出符合条件(例如 -name)
的文件名或文件路径,这些匹配条件通过find命令的选项给出。
$ find /home/slynux -name "*.txt" -print

find命令有一个选项 -iname(忽略字母大小写),该选项的作用和 -name类似,只不过在
匹配名字时会忽略大小写。
例如:
$ ls
example.txt EXAMPLE.txt file.txt
$ find . -iname "example*" -print
./example.txt
./EXAMPLE.txt
如果想匹配多个条件中的一个,可以采用OR条件操作:
$ ls
new.txt some.jpg text.pdf
$ find . \( -name "*.txt" -o -name "*.pdf" \) -print
./text.pdf
./new.txt
上面的代码会打印出所有的.txt和.pdf文件,是因为这个find命令能够匹配所有这两类文件。
\(以及\)用2. 否定参数
find也可以用“!”否定参数的含义。例如:
$ find . ! -name "*.txt" -print
上面的find命令能够匹配所有不以.txt结尾的文件名。于将 -name "*.txt" -o -name "*.pdf"视为一个整体。

3. 基于目录深度的搜索
find命令在使用时会遍历所有的子目录。我们可以采用深度选项-maxdepth和 -mindepth
来限制find命令遍历的目录深度。

使用下列命令将find命令向下的最大深度限制为1:
$ find . -maxdepth 1 -name "f*" -print

4. 根据文件类型搜索

-type可以对文件搜索进行过滤。借助这个选项,我们可以为find命令指明特定的文件匹配
类型。
只列出所有的目录:
$ find . -type d -print
将文件和目录分别列出可不是个容易事。不过有了find就好办了。例如,只列出普通文件:
$ find . -type f -print

文件类型 类型参数
普通文件 f
符号链接 l
目录 d
字符设备 c
块设备 b
套接字 s
FIFO p

5. 根据文件时间进行搜索

-atime、-mtime、-ctime可作为find的时间选项。它们可以用整数值指定,单位是天。
这些整数值通常还带有 - 或 + :- 表示小于,+ 表示大于。

打印出在最近7天内被访问过的所有文件:

find . -type f -atime -7 -print

6. 基于文件大小的搜索

find . -type f -size +2k

大于2KB的文件

7. 删除匹配的文件
-delete可以用来删除find查找到的匹配文件。
删除当前目录下所有的 .swp文件:
$ find . -type f -name "*.swp" -delete
8. 基于文件权限和所有权的匹配
也可以根据文件权限进行文件匹配。列出具有特定权限的所有文件:
$ find . -type f -perm 644 -print
# 打印出权限为644的文件

find . -type f -name "*.php" ! -perm 644 -print

8.1根据文件的所有权进行搜索

$ find . -type f -user root print

9. 利用find执行命令或动作

find命令可以借助选项-exec与其他命名进行结合。-exec算得上是find最强大的特性之一。

find . -type f -user root -exec chown slynux {} \;//必须以root用户运行才能更改所有权

在这个命令中,{}是一个与 -exec选项搭配使用的特殊字符串。对于每一个匹配的文件,
{}会被替换成相应的文件名。例如,find命令找到两个文件test1.txt和test2.txt,其所有者均为
slynux,那么find就会执行:
chown slynux {}
它会被解析为chown slynux test1.txt和chown slynux test2.txt。

,可以在exec中使
用+来代替  ;

技巧::

-exec结合多个命令
我们无法在-exec参数中直接使用多个命令。它只能够接受单个命令,不过
我们可以耍一个小花招。把多个命令写到一个shell脚本中(例如command.sh),然
后在-exec中使用这个脚本:
-exec ./commands.sh {} \;

::

10. 让find跳过特定的目录

$ find devel/source_path \( -name ".git" -prune \) -o \( -type f -print \)

以上命令打印出不包括在.git目录中的所有文件的名称(路径)。



















0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6343次
    • 积分:216
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:24篇
    • 译文:0篇
    • 评论:0条
    文章分类