linux 高級原1

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目錄中的所有文件的名稱(路徑)。



















發佈了12 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章