Shell

基於模式的 tar 特定文件

  • April 9, 2014

我得到了很多具有以下格式的文件:

2014_04_01_11.txt
2014_04_01_12.txt
2014_04_01_13.txt
2013_03_25_12.txt
2013_04_29_15.txt

我想將所有這些文件 tar 到存檔 20?_ ?? _ ??**.tar.gz。

我的實際命令是:

find . -name '????_??_??_*.txt' | tar ...

我不知道如何動態定義檔案的名稱。

這很簡單:

tar -cvzf 2014_04_01.tar.gz 2014_04_01_??.txt

更新

要為多個日期執行此操作(GNU 查找):

find . -maxdepth 1 -name '????_??_??_??.txt' |
 cut -d_ -f 1-3 |
 sort -u |
 while read date; do
   tar -cvzf "$date".tar.gz "$date"_??.txt
 done

我建議您使用以下 bash 腳本:

#!/bin/bash
FIRST=1
unset TARFILE
unset FILESET
find . -name '????_??_??_*.txt' | sort | while read fn
   do
   CURTARFILE=`echo $(basename $fn)|awk -F_ '{print $1"_"$2"_"$3".tar.gz"}'`
   if [ "$CURTARFILE" == "$TARFILE"] ; then
       FILESET=$FILESET" \"$fn\""
       FIRST=0
       continue
   fi
   [ "$FIRST" == "0" ] && tar cfz $TARFILE $FILESET
   $FILESET="\"$fn\""
   FIRST=0
   TARFILE=$CURTARFILE
done

引用自:https://unix.stackexchange.com/questions/123955