1. 程式人生 > >find命令查詢多個路徑的資料

find命令查詢多個路徑的資料

需求

假設我現在有這樣的目錄結構:

目錄結構

也就是目錄結構是:
|ggservice
|————common
|————constant
|————model
|————v1

其中我要把common包和constant包打包到一起。

引數-o

要是能通過find命令一次性的,把我們需要的資料查詢出來就好了。

後來在網上找到了-o引數。也就是or的縮寫。

命令就可以這樣寫:

find ./ -path '*/ggservice/common/*.class' -o -path '*/ggservice/constant/*.class'

這裡需要說明下,java檔案我會使用javac命令編譯成class

檔案,放到classes資料夾中。

那麼最後的命令我們就可以這麼寫:

# 對公共基礎包進行打包
export baseclass=`find ./ -path '*/ggservice/common/*.class' -o -path '*/ggservice/constant/*.class'`
echo "ggservice-base.jar 打包情況":
jar -cvf ${package}/ggservice-base.jar ${baseclass}

完整的命令

#!/bin/bash
export PATH=~/play-1.2.7:$PATH
#獲得當前目錄
cur=$(pwd)
echo
"pwd:"${cur} rm -rf ggservice-dataservice.jar output_path=${cur}/classes package=${cur}/package echo $output_path if [ ! -d $output_path ]; then mkdir $output_path fi if [ ! -d $package ]; then mkdir $package fi ## 獲取依賴庫和需要編譯的java檔案 export libs=`find ./dataservice/lib -name "*.jar" |xargs|sed "s/ /:/g"
` export javafiles=`find ./dataservice/ -name "*.java" |xargs|sed "s/ / /g"` export javautils=`find ./utils/app/ -name "*.java" |xargs|sed "s/ / /g"` export play_lib=/opt/play-1.2.7/framework/play-1.2.7.jar export play_lib_common=`find /opt/play-1.2.7/framework/lib/ -name "*.jar" |xargs|sed "s/ /:/g"` #echo ${javafiles} #echo "公共---------" #echo ${javautils} # 清除 rm -rf package/* # 清除編譯後的class檔案 rm -rf ${output_path}/* # 編譯 javac -d ${cur}/classes -cp ${libs}:$play_lib:$play_lib_common -encoding utf-8 ${javafiles} ${javautils} # 分批打包 cd /home/jenkins/workspace/ggservice/dataservice/app/ggservice/v1/ dir=$(ls -l |awk '/^d/ {print $NF}') cd $output_path for i in $dir do echo "ggservice-"${i}".jar打包情況": jar -cvf ${package}/ggservice-${i}.jar */v1/$i/* done # 對公共基礎包進行打包 export baseclass=`find ./ -path '*/ggservice/common/*.class' -o -path '*/ggservice/constant/*.class'` echo "ggservice-base.jar 打包情況": jar -cvf ${package}/ggservice-base.jar ${baseclass}

其他類似引數

引數-a:

-a引數就是and的縮寫,也就是要同時滿足的意思。

引數-not

查詢不滿足條件的檔案

引數-size

查詢滿足檔案大小的檔案