07_Linux目錄文件操做命令4解壓縮,文件查找_個人Linux之路

 

這一節仍是同樣學習操做目錄文件的命令php

在這一節,我會講到解壓壓縮tar以及zip命令,以及文本查找命令grephtml

 

tar 打包壓縮命令

tar命令能夠爲linux的文件和目錄建立檔案python

首先要弄清兩個概念:打包和壓縮。打包是指將一大堆文件或目錄變成一個總的文件;壓縮則是將一個大的文件經過一些壓縮算法變成一個小文件。linux

爲何要區分這兩個概念呢?這源於Linux中不少壓縮程序只能針對一個文件進行壓縮,這樣當你想要壓縮一大堆文件時,你得先將這一大堆文件先打成一個包(tar命令),而後再用壓縮程序進行壓縮(結合gzip, bzip2命令)。 正則表達式

tar(選項)(參數)

  

他的主要選項以下算法

-A或--catenate:新增文件到以存在的備份文件;
-B:設置區塊大小;
-c或--create:創建新的備份文件;
-C <目錄>:這個選項用在解壓縮,若要在特定目錄解壓縮,可使用這個選項。
-d:記錄文件的差異;
-x或--extract或--get:從備份文件中還原文件;
-t或--list:列出備份文件的內容;
-z或--gzip或--ungzip:經過gzip指令處理備份文件;
-Z或--compress或--uncompress:經過compress指令處理備份文件;
-f<備份文件>或--file=<備份文件>:指定備份文件;
-v或--verbose:顯示指令執行過程;
-r:添加文件到已經壓縮的文件;
-u:添加改變了和現有的文件到已經存在的壓縮文件;
-j:支持bzip2解壓文件;
-v:顯示操做過程;
-l:文件系統邊界設置;
-k:保留原有文件不覆蓋;
-m:保留文件不被覆蓋;
-w:確認壓縮文件的正確性;
-p或--same-permissions:用原來的文件權限還原文件;
-P或--absolute-names:文件名使用絕對名稱,不移除文件名稱前的「/」號;
-N <日期格式> 或 --newer=<日期時間>:只將較指定日期更新的文件保存到備份文件裏;
--exclude=<範本樣式>:排除符合範本樣式的文件。

  

例如咱們將一個文件打包express

tar -cvf log.tar somelogs.log     

  

注意這樣是隻打包,不壓縮bash

 

打包後,以gzip壓縮工具

tar -zcvf log.tar.gz somelogs.log

  

打包後,以bzip2壓縮學習

tar -jcvf log.tar.bz2 somelogs.log

  

注意,第一個參數也就是文件名,能夠本身定義,但按照常理須要以特定後綴結尾,這樣更容易區分

 

查閱tar包內有哪些文件

tar -ztvf log.tar.gz

  

將tar包解壓縮

tar -zxvf /opt/soft/test/log.tar.gz

  

只將tar內的部分文件解壓出來

tar -zxvf /opt/soft/test/log30.tar.gz log2013.log

  咱們能夠經過如下命令查看壓縮包裏的文件名

tar -ztvf

  

事實上,咱們最經常使用的命令也就是壓縮和解壓縮

壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的文件或目錄名稱
查 詢:tar -jtv -f filename.tar.bz2
解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄

  

 

zip 解壓縮命令

zip命令能夠用來解壓縮文件,或者對文件進行打包操做。zip是個使用普遍的壓縮程序,文件經它壓縮後會另外產生具備「.zip」擴展名的壓縮文件。

zip(選項)(參數)

  

全部選項以下

-A:調整可執行的自動解壓縮文件;
-b<工做目錄>:指定暫時存放文件的目錄;
-c:替每一個被壓縮的文件加上註釋;
-d:從壓縮文件內刪除指定的文件;
-D:壓縮文件內不創建目錄名稱;
-f:此參數的效果和指定「-u」參數相似,但不只更新既有文件,若是某些文件本來不存在於壓縮文件內,使用本參數會一併將其加入壓縮文件中;
-F:嘗試修復已損壞的壓縮文件;
-g:將文件壓縮後附加在已有的壓縮文件以後,而非另行創建新的壓縮文件;
-h:在線幫助;
-i<範本樣式>:只壓縮符合條件的文件;
-j:只保存文件名稱及其內容,而不存聽任何目錄名稱;
-J:刪除壓縮文件前面沒必要要的數據;
-k:使用MS-DOS兼容格式的文件名稱;
-l:壓縮文件時,把LF字符置換成LF+CR字符;
-ll:壓縮文件時,把LF+cp字符置換成LF字符;
-L:顯示版權信息;
-m:將文件壓縮並加入壓縮文件後,刪除原始文件,即把文件移到壓縮文件中;
-n<字尾字符串>:不壓縮具備特定字尾字符串的文件;
-o:以壓縮文件內擁有最新更改時間的文件爲準,將壓縮文件的更改時間設成和該文件相同;
-q:不顯示指令執行過程;
-r:遞歸處理,將指定目錄下的全部文件和子目錄一併處理;
-S:包含系統和隱藏文件;
-t<日期時間>:把壓縮文件的日期設成指定的日期;
-T:檢查備份文件內的每一個文件是否正確無誤;
-u:更換較新的文件到壓縮文件內;
-v:顯示指令執行過程或顯示版本信息;
-V:保存VMS操做系統的文件屬性;
-w:在文件名稱裏假如版本編號,本參數僅在VMS操做系統下有效;
-x<範本樣式>:壓縮時排除符合條件的文件;
-X:不保存額外的文件屬性;
-y:直接保存符號鏈接,而非該連接所指向的文件,本參數僅在UNIX之類的系統下有效;
-z:替壓縮文件加上註釋;
-$:保存第一個被壓縮文件所在磁盤的卷冊名稱;
-<壓縮效率>:壓縮效率是一個介於1~9的數值。

  

下面經過幾個例子熟悉一下這個命令

將/home/susmtoe/python/這個目錄下全部文件和文件夾打包爲當前目錄下的python.zip:

zip -q -r python.zip /home/susmote/python

  

 

 

grep 文本搜索命令

grep(global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。

 

他的選項以下

-a 不要忽略二進制數據。
-A<顯示列數> 除了顯示符合範本樣式的那一行以外,並顯示該行以後的內容。
-b 在顯示符合範本樣式的那一行以外,並顯示該行以前的內容。
-c 計算符合範本樣式的列數。
-C<顯示列數>或-<顯示列數>  除了顯示符合範本樣式的那一列以外,並顯示該列以前後的內容。
-d<進行動做> 當指定要查找的是目錄而非文件時,必須使用這項參數,不然grep命令將回報信息並中止動做。
-e<範本樣式> 指定字符串做爲查找文件內容的範本樣式。
-E 將範本樣式爲延伸的普通表示法來使用,意味着使用能使用擴展正則表達式。
-f<範本文件> 指定範本文件,其內容有一個或多個範本樣式,讓grep查找符合範本條件的文件內容,格式爲每一列的範本樣式。
-F 將範本樣式視爲固定字符串的列表。
-G 將範本樣式視爲普通的表示法來使用。
-h 在顯示符合範本樣式的那一列以前,不標示該列所屬的文件名稱。
-H 在顯示符合範本樣式的那一列以前,標示該列的文件名稱。
-i 忽略字符大小寫的差異。
-l 列出文件內容符合指定的範本樣式的文件名稱。
-L 列出文件內容不符合指定的範本樣式的文件名稱。
-n 在顯示符合範本樣式的那一列以前,標示出該列的編號。
-q 不顯示任何信息。
-R/-r 此參數的效果和指定「-d recurse」參數相同。
-s 不顯示錯誤信息。
-v 反轉查找。
-w 只顯示全字符合的列。
-x 只顯示全列符合的列。
-y 此參數效果跟「-i」相同。
-o 只輸出文件中匹配到的部分。

  

下面經過幾個例子熟悉grep命令

在文件中搜索一個單詞,命令會返回一個包含「match_pattern」的文本行:

grep match_pattern file_name
grep "match_pattern" file_name

  

也能夠同時在多個文件中查找

grep "match_pattern" file_1 file_2 file_3 ...

  

輸出除以外的全部行 -v 選項:

grep -v "match_pattern" file_name

  

標記匹配顏色 --color=auto 選項:

grep "match_pattern" file_name --color=auto

  

使用正則表達式 -E 選項:

grep -E "[1-9]+"
或
egrep "[1-9]+"

  注意egrep命令與grep  -E效果類似

 

只輸出文件中匹配到的部分 -o 選項:

echo this is a test line. | grep -o -E "[a-z]+\."
line.

echo this is a test line. | egrep -o "[a-z]+\."
line.

  注意,在這裏咱們用到了聯合命令,經過一個 「  | 」 鏈接兩個命令,注意是按照從左到右的順序執行的

  echo 命令表明輸出的命令,至關與程序設計中的print

 

統計文件或者文本中包含匹配字符串的行數 -c 選項:

grep -c "text" file_name

  

輸出包含匹配字符串的行數 -n 選項:

grep "text" -n file_name
或
cat file_name | grep "text" -n

#多個文件
grep "text" -n file_1 file_2

  

打印樣式匹配所位於的字符或字節偏移:

echo gun is not unix | grep -b -o "not"
7:not

#一行中字符串的字符便宜是從該行的第一個字符開始計算,起始值爲0。選項 -b -o 通常老是配合使用。

  

搜索多個文件並查找匹配文本在哪些文件中:

grep -l "text" file1 file2 file3...

  

grep還能夠用來遞歸搜索文件

在多級目錄中對文本進行遞歸搜索:

grep "text" . -r -n

  

忽略匹配樣式中的字符大小寫:

echo "hello world" | grep -i "HELLO"
hello

  

選項 -e 制動多個匹配樣式:

echo this is a text line | grep -e "is" -e "line" -o
is
line

#也可使用-f選項來匹配多個樣式,在樣式文件中逐行寫出須要匹配的字符。
cat patfile
aaa
bbb

echo aaa bbb ccc ddd eee | grep -f patfile -o

  

在grep搜索結果中包括或者排除指定文件:

#只在目錄中全部的.php和.html文件中遞歸搜索字符"main()"
grep "main()" . -r --include *.{php,html}

#在搜索結果中排除全部README文件
grep "main()" . -r --exclude "README"

#在搜索結果中排除filelist文件列表裏的文件
grep "main()" . -r --exclude-from filelist

  

使用0值字節後綴的grep與xargs:

#測試文件:
echo "aaa" > file1
echo "bbb" > file2
echo "aaa" > file3

grep "aaa" file* -lZ | xargs -0 rm

#執行後會刪除file1和file3,grep輸出用-Z選項來指定以0值字節做爲終結符文件名(\0),xargs -0 讀取輸入並用0值字節終結符分隔文件名,而後刪除匹配文件,-Z一般和-l結合使用。

  

grep靜默輸出:

grep -q "test" filename

#不會輸出任何信息,若是命令運行成功返回0,失敗則返回非0值。通常用於條件測試。

  

打印出匹配文本以前或者以後的行:

#顯示匹配某個結果以後的3行,使用 -A 選項:
seq 10 | grep "5" -A 3
5
6
7
8

#顯示匹配某個結果以前的3行,使用 -B 選項:
seq 10 | grep "5" -B 3
2
3
4
5

#顯示匹配某個結果的前三行和後三行,使用 -C 選項:
seq 10 | grep "5" -C 3
2
3
4
5
6
7
8

#若是匹配結果有多個,會用「--」做爲各匹配結果之間的分隔符:
echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
a
b
--
a
b

  

 個人官方博客 www.susmote.com

相關文章
相關標籤/搜索