Shell
基於模式的 tar 特定文件
我得到了很多具有以下格式的文件:
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