다음 형식의 파일을 많이 받았습니다.
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
이 모든 파일을 아카이브 20??_??_??**.tar.gz에 패키지하고 싶습니다.
내 실제 명령은 다음과 같습니다
find . -name '????_??_??_*.txt' | tar ...
아카이브 이름을 동적으로 정의하는 방법을 모르겠습니다.
답변1
이것은 매우 간단합니다.
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
답변2
다음 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