2016-12-21 10 views
0

У меня есть список файла, которые имеют формат, как этот _ddmmyyyy.txt , например:Как указать файл по имени файла в качестве даты?

filea_01122016.txt 
filea_02122016.txt 
filea_03122016.txt 
filea_04122016.txt 
filea_05122016.txt 

И я хочу, чтобы сжать эти файлы из SYSDATE - 3 дня в моем окружении RHEL. Предположим, что сегодня 5 декабря 2016 года, и я хочу сжать этот файл с даты 2 дека, 1 раз назад. Поскольку дата, когда Im использует имя файла, не является меткой времени создания файла (по системе).

Я прочитал несколько руководств, что они используют утилиту find, но в моем случае Im использует дату из имени файла.

я уже сделать какой-то механизм, как это для сжатия текста в течение целого месяца

dir=`date '+%Y%m%d'` 

tanggal=`date --date="$(date +%Y-%m-15) -1 month" '+%Y%m'` 

base=/inf_shr/ProcessedSrc/CDC/ARCHIVE/F_ABC 
cd $base 

mkdir $dir 
cp ../../F_CC/*${tanggal}* $dir 

tar cvf - $dir | gzip -9 - > ${tanggal}_F_CC.tar.gz 

rm -rf $dir 
rm -rf ../../F_CC/*${tanggal}* 

Теперь я хочу сжать для файла с SYSDATE - 3 дня *) извините за мой английский

И идея для код? спасибо

+0

Slice, разделение, добавление, конвертировать, присоединиться и строка. Вот как я могу думать об этом. –

+0

да чувак. Я просто хочу знать сценарий, как ls -lh, который может содержать список, как я упоминал выше. – BlackRabbit1703

+1

Что вы пробовали? Большинство из нас с удовольствием помогут вам улучшить свое ремесло, но они менее счастливы, чем неоплачиваемый персонал по программированию. Покажите нам свою работу в [MCVE] (http://stackoverflow.com/help/mcve), результат, который вы ожидали, и полученные результаты, и мы поможем вам разобраться. – ghoti

ответ

0

TL; DR, но ниже будет мой подход

$ ls # listing the initial content 
filea_17122016.txt filea_19122016.txt filea_21122016.txt 
filea_18122016.txt filea_20122016.txt script.sh 
$ cat script.sh # Ok, here is the script I wrote 
#!/bin/bash 
now="$(date +%s)" 
for file in filea_* 
# Mind, if recursive globbing required put ** instead of * 
# after you do set -s globstar 
do 
    date=${file#filea_} 
    date=${date%.txt} 
    y=$(cut -b 5- <<<"$date") # We use cut to trim year month and date separately 
    m=$(cut -b 3-4 <<<"$date") 
    d=$(cut -b 1-2 <<<"$date") 
    date=$(date -d "$y-$m-$d" +%s) # Calulating the time in seconds from epoch, using the date string where we use the above calculated values 
    dif=$(((now-date)/(3600*24))) #Calculating the difference in dates 
    if [ "0$dif" -ge 3 ] 
    then 
    zip mybackup.zip "$file" #If the file is 3 or more days old, the add it to zip 
    #Note if the zip file already exists, files will be appended 
    rm "$file" # remove the file 
    fi 
done 
$ ./script.sh # Script doing its job 
    adding: filea_17122016.txt (stored 0%) 
    adding: filea_18122016.txt (stored 0%) 
$ unzip -l mybackup.zip #listing the contents of the zip file 
Archive: mybackup.zip 
    Length  Date Time Name 
--------- ---------- ----- ---- 
     0 2016-12-21 11:38 filea_17122016.txt 
     0 2016-12-21 11:38 filea_18122016.txt 
---------      ------- 
     0      2 files 
$ ls # listing the left over content, which includes the newly created zip 
filea_19122016.txt filea_21122016.txt script.sh 
filea_20122016.txt mybackup.zip 
$ # Job done 
+1

HI @sjsam благодарим вас за ответ. Я попытаюсь быстро реализовать ваш код и вернуться к результату! большое спасибо – BlackRabbit1703

+0

@ BlackRabbit1703: Добро пожаловать, соглашайтесь с ответом, если это поможет. – sjsam

+1

heeyy Capt @sjsam! ты спасаешь моего чувака! Большое спасибо за вас, запомнилось! – BlackRabbit1703