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指令顯示每個檔案的檔案類型