shell脚本打包指定目录下的特定后缀的文件

最近总是需要打包不同目录下的代码,之前都是find 之后 使用tar命令来打包,总是输入长串命令,觉得麻烦就想着写个脚本吧。

结果发现 find 命令在脚本中不能执行,后来询问朋友之后,原来是 *.h   *号 没有被发挥通配符的作用 ! 必须把文件后缀 以变量的形式传入才行,下边是自己的代码!

#!/bin/bash
CUR_DIR=`pwd`
FILE_TYPE_H="h"
FILE_TYPE_C="c"
FILE_TYPE_CPP="cpp"
FILE_TYPE_CC="cc"
TMP_FILE="tmp.txt"
TARGET_FILE=$CUR_DIR"/Code.tar.gz"
if [ -f "$TARGET_FILE" ];then
  `rm -rf $TARGET_FILE`
fi
echo "You will compress the codes in the { $CUR_DIR } direcotry "
echo "Are you sure { y or n }"
read AnsOne
if [ "$AnsOne" = "y" ] || [ "$AnsOne" = "yes" ]; then
   echo "compress start >>>>  and the dir is $CUR_DIR "
   exec 3>$TMP_FILE
   TMP_CMD="find $CUR_DIR -name *.$FILE_TYPE_H -o -name *.$FILE_TYPE_C -o -name *.$FILE_TYPE_CPP -o -name *.$FILE_TYPE_CC"
   echo "excute shell cmd >>>>> $TMP_CMD"
   RESULT=$(${TMP_CMD})
   echo "$RESULT" >&3
   exec 3>&-
   echo "start compress code............."
   TAR_CMD="tar -T $TMP_FILE -zcvf $TARGET_FILE"
   ${TAR_CMD}
   echo "Compress code end .............leave file $TARGET_FILE"
   `rm -rf $TMP_FILE`
elif [ "$AnsOne" = "n" ] || [ "$AnsOne" = "no" ]; then
   echo "You choose n and please input the new path :"
   exec 4>$TMP_FILE
   read NEW_PATH
   TMP_CMD="find $NEW_PATH -name *.$FILE_TYPE_H -o -name *.$FILE_TYPE_C -o -name *.$FILE_TYPE_CPP -o -name *.$FILE_TYPE_CC"
   echo "excute shell cmd >>>>> $TMP_CMD"
   RESULT=$(${TMP_CMD})
   echo "$RESULT" >&4
   exec 4>&-
   echo "start compress code............."
   TAR_CMD="tar -T $TMP_FILE -zcvf $TARGET_FILE"
   ${TAR_CMD}
   echo "Compress code end .............leave file $TARGET_FILE"
   `rm -rf $TMP_FILE`
else
   echo "cant not figure your input "
fi

更新一个新的版本

#!/bin/bash
CUR_DIR=`pwd`
FIRST_PATH="first"
SECOND_PATH="second"
FILE_TYPE_H="h"
FILE_TYPE_C="c"
FILE_TYPE_CPP="cpp"
FILE_TYPE_CC="cc"
TMP_FILE="tmp.txt"
TMP_LOG="tmp.log"
DETACHED_BRANCH="HEAD detached"
TARGET_FILE_TMP=`sh -c 'git branch --no-color 2> /dev/null' | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' -e 's/\//\_/g'`
if [[ $TARGET_FILE_TMP == *$DETACHED_BRANCH* ]];then
TARGET_FILE_BRANCH="Head_detached_branch"
else
TARGET_FILE_BRANCH=$TARGET_FILE_TMP
fi
FINAL_PATH=""
case $CUR_DIR in
  *$FIRST_PATH*)
          FINAL_PATH="_first_path"
          ;;
  *$SECOND_PATH*)
         FINAL_PATH="_second_path"
         ;;
esac
if [ -z "$TARGET_FILE_BRANCH" ];then
  TARGET_FILE=$CUR_DIR"/Code.tar.gz"
else
  TARGET_FILE=$CUR_DIR"/"$TARGET_FILE_BRANCH$FINAL_PATH"Code.tar.gz"
fi
if [ -f "$TARGET_FILE" ];then
  `rm -rf $TARGET_FILE`
fi
if [ -f "$TMP_FILE" ];then
  `rm -rf $TMP_FILE`
fi
if [ -f "$TMP_LOG" ];then
  `rm -rf $TMP_LOG`
fi
echo "You will compress the codes in the { $CUR_DIR } direcotry "
echo "Are you sure { y or n }"
find_tar_action(){
   echo "compress start >>>>  and the dir is $1 "
   exec 3>$TMP_FILE
   TMP_CMD="find $1 -name *.$FILE_TYPE_H -o -name *.$FILE_TYPE_C -o -name *.$FILE_TYPE_CPP -o -name *.$FILE_TYPE_CC"
   echo "excute shell cmd >>>>> $TMP_CMD"
   RESULT=$(${TMP_CMD})
   echo "$RESULT" >&3
   exec 3>&-
   `sed -e '/test/d'  $TMP_FILE > $TMP_LOG`
   echo "start compress code............."
   TAR_CMD="tar -T $TMP_LOG -zcvphf $TARGET_FILE"
   ${TAR_CMD}
   echo "Compress code end .............leave file $TARGET_FILE"
   `rm -rf $TMP_FILE`
   `rm -rf $TMP_LOG`
}
read AnsOne
if [ "$AnsOne" = "y" ] || [ "$AnsOne" = "yes" ]; then
  find_tar_action "."
elif [ "$AnsOne" = "n" ] || [ "$AnsOne" = "no" ]; then
  echo "You choose n and please input the new path :"
  read NEW_PATH
  find_tar_action $NEW_PATH
else
   echo "cant not figure your input "
fi

之前的还是太复杂了,写个简单版本的,方便理解

#!/bin/bash
FILE_PATH=$1  ## input file path
find $FILE_PATH -type f -name "*" > $FILE_PATH"_all_files.txt"
if [ $? -ne 0 ]; then
    echo "can not find files in $FILE_PATH"
fi
tar -T $FILE_PATH"_all_files.txt" -zcvf $FILE_PATH"_.tar.gz"
rm -rf $FILE_PATH"_all_files.txt"

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值