LINUX.ORG.RU
решено ФорумAdmin

ls группировка по паттерну

 , ,


0

3

Есть примерно такой каталог с бекапами



2015-03-03_01-50-01.sql.rar
2015-03-03_20-38-01.sql.rar
2015-03-03_19-20-01.sql.rar
2015-03-04_22-59-01.sql.rar
2015-03-07_05-54-01.sql.rar
2015-03-07_09-02-01.sql.rar
2015-03-09_16-04-01.sql.rar
2015-03-09_12-26-01.sql.rar


Хотелось бы копировать файлы каждого дня, по одному, т.е:



2015-03-03_01-50-01.sql.rar
2015-03-04_22-59-01.sql.rar
2015-03-07_09-02-01.sql.rar
2015-03-09_16-04-01.sql.rar


Нужна группировка по определенному паттерну

Есть ли возможность реализовать такое, кто сталкивался?

★★

awk -F_ '!k[$1]{k[$1]=1; print}'
anonymous
()

Нечто такое, похоже, работает:

@[~]$ echo '2015-03-03_01-50-01.sql.rar^J2015-03-03_20-38-01.sql.rar^J2015-03-03_19-20-01.sql.rar^J2015-03-04_22-59-01.sql.rar^J2015-03-07_05-54-01.sql.rar^J2015-03-07_09-02-01.sql.rar^J2015-03-09_16-04-01.sql.rar^J2015-03-09_12-26-01.sql.rar' | sort | uniq -s 8 -w 2
2015-03-03_01-50-01.sql.rar
2015-03-04_22-59-01.sql.rar
2015-03-07_05-54-01.sql.rar
2015-03-09_12-26-01.sql.rar

xaizek ★★★★★
()

сталкивался, тебя интересует тот первый за сутки? задача сводится к получению уникальных «суток» для каждого из суток, получить список файлов, отсортировать, взять первый.

cat list.txt \
 while read filename ; do echo ${filename:0:10} ; done  \
| sort | uniq | \
while read day ; do egrep '^'$day list.txt | sort | head -n1 ; done
2015-03-03_01-50-01.sql.rar
2015-03-04_22-59-01.sql.rar
2015-03-07_05-54-01.sql.rar
2015-03-09_12-26-01.sql.rar

egrep можно заменить глобом ls -1 ${day}*

bl ★★★
()

2015-03-03_01-50-01.sql.rar

.rar

осиль нормальный формат сжатия. Потом поговорим за временные штампы, в отличие от Windows™ их можно хранить не только в именах.

emulek
()

Извините, это соревнование по придумыванию самого большого количества решений на bash?

Сравниваем префикс с таковым в предыдущем файле:

$ ls -1 | sort | while read A ; do [[ "$B" != "${A%%_*}" ]] && echo "$A"; B="${A%%_*}" ;done

Генерим префикс с помощью sed

$ for F in $( ls -1 2* | sed 's/_.*//g' | uniq ) ; do ls -1 $F* | head -n 1 ; done

Генерим префикс с помощью awk

$ for F in $( ls -1 | awk --field-separator="_" '{print $1;}' | uniq ) ; do ls -1 $F* | head -n 1 ; done

Генерим префикс перебором

$ for ((D=1;D<32;D++)) ; do D2=$D ; [[ $D -le 9 ]] && D2="0$D" ; ls -1 2015-03-${D2}* 2>/dev/null | head -n 1; done







>>>>>>>>>> И победитель сезона <<<<<<<<<<

$ ls -1 2* | uniq -w 10

Kroz ★★★★★
()
Ответ на: комментарий от emulek

осиль нормальный формат сжатия. Потом поговорим за временные штампы, в отличие от Windows™ их можно хранить не только в именах.

Подскажите «нормальный» формат сжатия и с удовольствием осилю. Хотелось бы сжатие на уровне rar -m5

ex3me ★★
() автор топика
Ответ на: комментарий от emulek

Спасибо, действительно компрессия сильнее чем в rar для sql

du -sh ./*.* 222M ./kg_db.sql 34M ./kg_db.sql.rar 29M ./kg_db.sql.tar.xz

Но кусается время компрессии


time rar a -m5  kg_db.sql.rar kg_db.sql 
real	0m38.675s
user	0m38.054s
sys	0m0.224s


VS


time tar -cf - kg_db.sql | xz -9 -c - > kg_db.sql.tar.xz 
real	3m12.517s
user	3m10.824s
sys	0m1.408s


Если нет больших обьемов, то приемлимо

ex3me ★★
() автор топика
Ответ на: комментарий от ex3me

1. свежие версии tar умеют xz сами (tar -cJ)

2. создать быстрый И сильный архиватор математически невозможно. Тормозит не процессор, а память, которой нужно МНОГО, и она у нас ОДНА. WinRAR очень старый архиватор, и с аппетитом xz просто-бы не взлетел когда-то.

emulek
()
Ответ на: комментарий от emulek

все решения — говно.

Я вот просмотрел топик и как-то вот не нашел решения от тебя. Или ты мастак только слюнями брызгать?

Kroz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.