tar arquivos específicos baseados em um padrão

1

Eu tenho muitos arquivos com o seguinte formato:

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

Eu gostaria de tar todos os arquivos de teses em um arquivo 20 ?? _ ?? _ ?? **. tar.gz.

Meu comando atual é:

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

Eu não sei como definir dinamicamente o nome do arquivo.

    
por Greg 09.04.2014 / 18:57

2 respostas

2

Isso é muito simples:

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

Atualizar

Para fazer isso em várias datas (encontrar 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
    
por 09.04.2014 / 19:15
0

Sugiro o seguinte script:

#!/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
    
por 09.04.2014 / 19:21