天天看點

linux 之 find 指令

Linux Find指令要對一個擁有好幾千/萬個檔案的目錄進行篩選,隻提取*.data檔案,并且要求删除<=10k的檔案*.data,将最後剩下的檔案進行打包,網上搜了一下,發現find指令挺強大的,再查了一下shell的for循環語句,順利将功能完成,快速簡單,指令如下:

1.find 篩選檔案

  I:  find ./destDirPath/ -name "*[^.data]" #篩選出任何不是*.data檔案

  II: find ./destDirPath/ -name "*.data" -size +10k #篩選出size>10k的*.data檔案

  注意,第二條size開關後面的+/-号,可以控制檔案大于/小于指定大小  

2.shell腳本:利用for循環語句完成功能

   #!bin/bash

   for DataFile in $(find ./destDirPath/ -name "*[^.data]")

   do

        #找到任何不是*.data的檔案,并删除之

        rm ./$DataFile

   done

   for DataFile in $(find destDirPath/ -name *.data -size -10k)

        #篩選出任何size<10的檔案,并删除之

   for DataFile in $(find ./server2-data/ -name *.data -size 10k)

        #篩選出任何size=10k的檔案,并删除之

呵呵,網上搜了下,并馬上寫出來,贊揚下自己,第一次寫真正的shell腳本,nice~~~

3.tar打包指令

   I: tar -czvf ./destDirPath.tar.gz ./destDirPath  #壓縮

   其中-c表示建立壓縮包,-z表以gzip方式壓縮,-v表顯示壓縮資訊,-f後面一定要跟着壓縮的打包名字

   II:tar -xzvf ./destDirPath.tar.gz 

   其中-x表示解壓縮

=============華麗麗分割線,轉載如下==============

我們經常要在日常的工作中查找檔案,要說linux下最強大的檔案查找工具,非find莫屬。find可以從檔案名、讀取修改時間、大小、類型等等來篩選檔案,可以完成日常幾乎所有的查找需求。

來看一個簡單的例子:

find /tmp/ -name 'galeki*'

意思就是在/tmp目錄下找出以“galeki”開頭的檔案,-name指出是對檔案名進行篩選,是不是很簡單明了?除了檔案名,find還有更強大的篩選條件:

1.時間:

參數 意義 

-atime n 上一次存取時間在n*24小時前以内的檔案 

-ctime n 上一次狀态改變在n*24小時前以内的檔案 

-mtime n 上一次修改時間在n*24小時前以内的檔案 

-newer file 比file所指的檔案還要新的檔案 

2.大小:

-size n[bkMG] 大小為n(b為比特,k為KB,M為MB,G為GB)的檔案 

3.所有者:

-user name 所有者使用者名稱是name的檔案 

-group name 所有者使用者組群名稱是name的檔案 

例子:

find /tmp/ -name 'sess*' -mtime 1   #在/tmp目錄下找到所有以'sess'開頭、并且在一個小時以内修改過的檔案

find ./ -name '*.zip' -size 546k       #在目前目錄下找到所有546KB的zip壓縮封包件

find /tmp/ -user 'galeki'               #在/tmp目錄下找到所有所有者為galeki的檔案

另外,還可以用"+"、"-"來進一步修飾時間和大小的條件:

find src/ -mtime +2            #找出src目錄下上一次修改時間在2天以前的檔案

find download/ -size +50M    #在download目錄下找出大于50M的檔案

光找出檔案還不夠,我們還要對找出的檔案進行處理才有意義,一般來講可以把find的查找結果傳遞給其他的指令做進一步處理。find本身也提供了許多處理動作的選項。

常用的處理動作:

-print

 列印出找出檔案的完整位址,一個檔案一行

-delete

 删除找出的檔案 

-exec command {} \; 

 對每一個找到的檔案執行command指令,

并用檔案替換"{}",“\;”是固定的結束符。 

find /tmp/ -ctime +7 -delete            #删除/tmp目錄下一周以前建立的檔案

find ./ -name '*.unk' -exec file {} \;   #找出目前檔案夾下字尾是unk的檔案,并用file指令顯示每個檔案的檔案類型

繼續閱讀