Плз., подскажите, можно ли в shell-скриптах использовать массивы? Или такой возможности для bash в прошивках нет?! Может вопрос и поднимался - да не нашел...
RT-N16 + Entware repo
DIR-320 & RTN-r3297 from USB>r3478>r3539>r3722>r3815>r3877>r4051>r4990>r5163
Спс, будем страдать с awk
offtop Может кто букварь нормальный по нему подскажет?
RT-N16 + Entware repo
держи букварь - http://ss64.com/bash/
Last edited by Omega; 27-01-2013 at 11:37. Reason: fixed
DIR-320 & RTN-r3297 from USB>r3478>r3539>r3722>r3815>r3877>r4051>r4990>r5163
Доброго времени суток
Помогите пожалуйста с решением небольшой задачи
Из файлов, сгруппированных по префиксу 'Имя.html' (до первого знака '-', выделено синим) оставить один (самый свежий, если сгруппировано более одного файла)Должно остаться:Code:# ls -la admin admin 85049 2012-09-15 23:35 Another.html-gzip-2883620-1043150-1347607303 admin admin 85049 2012-09-16 02:28 Another.html-gzip-2883620-1043150-1347745318 admin admin 68377 2012-09-15 23:36 Begin.html-gzip-2883711-354959-1347737586 admin admin 31600 2012-09-15 23:36 Content.html-gzip-2883623-424402-1347737434 admin admin 46154 2012-09-14 12:20 Content.html-gzip-2883623-475162-1347607301 admin admin 1707728 2012-09-16 13:33 Double.html-gzip-2883672-9165565-1347787944 admin admin 1707182 2012-09-14 12:19 File.html-gzip-2883673-9163898-1347601490 admin admin 1682905 2012-09-15 23:33 File.html-gzip-2883673-9141871-1347737585 admin admin 1708533 2012-09-15 23:24 File.html-gzip-2883673-9165565-1347736998 admin admin 1707728 2012-09-13 02:37 File.html-gzip-2883673-9165565-1347745334В написании скриптов не очень силён, алгоритмы в голове есть, но не знаю, каким инструментом их реализовать. Поиск результатов не дал.Code:# ls -la admin admin 85049 2012-09-16 02:28 Another.html-gzip-2883620-1043150-1347745318 admin admin 68377 2012-09-15 23:36 Begin.html-gzip-2883711-354959-1347737586 admin admin 31600 2012-09-15 23:36 Content.html-gzip-2883623-424402-1347737434 admin admin 1707728 2012-09-16 13:33 Double.html-gzip-2883672-9165565-1347787944 admin admin 1682905 2012-09-15 23:33 File.html-gzip-2883673-9141871-1347737585
P.S. Предполагается запускать из cron. На входе скрипта - путь к каталогу, с которого начинать обработку. Для универсальности хорошо бы сделать рекурсивную обработку подкаталогов
Спасибо
Last edited by KRandall; 17-09-2012 at 13:20. Reason: Коррекция задачи
WL-500gP(v1, 64mb) (1.9.2.7-d-r2624 by Oleg) + 3 x USB HDD
Работают: analog, syslog-ng, cron, samba 3, RTorrent+RuTorrent, lighttpd, vsftpd+, настроена сеть и сетевая печать
Спасибо, но это немного не то.
В моём случае префикс у файлов разный, даты создания в имени файла нет и еще нужен какой-то механизм выбора файла по дате создания из группы файлов с одним префиксом
Вот например такой алгоритм.
Выводим список файлов в каталоге с помощью tree (сортируем по дате создания по убыванию - tree -D -N -C -t -i -o tree.txt каталог)Далее делаем цикл по записям файла tree.txt.Code:[Sep 16 13:33] Double.html-gzip-2883672-9165565-1347787944 [Sep 16 02:28] Another.html-gzip-2883620-1043150-1347745318 [Sep 15 23:36] Begin.html-gzip-2883711-354959-1347737586 [Sep 15 23:36] Content.html-gzip-2883623-424402-1347737434 [Sep 15 23:35] Another.html-gzip-2883620-1043150-1347607303 [Sep 15 23:33] File.html-gzip-2883673-9141871-1347737585 [Sep 15 23:24] File.html-gzip-2883673-9165565-1347736998 [Sep 14 12:20] Content.html-gzip-2883623-475162-1347607301 [Sep 14 12:19] File.html-gzip-2883673-9163898-1347601490 [Sep 13 02:37] File.html-gzip-2883673-9165565-1347745334
Первая запись (Double.html). Файлов с таким префиксом в цикле не находим - ничего не делаем.
Вторая запись (Another.html). Находим файл с таким же префиксом в 5-й записи, удаляем файл с этим именем и удаляем записи с найденным префиксом из файла tree.txt.
Третья запись (Begin.html). Файлов с таким префиксом в цикле не находим - ничего не делаем.
Четвёртая запись (Content.html). Находим файл с таким же префиксом в 8-й записи, удаляем файл с этим именем и удаляем записи с этим префиксом из файла tree.txt.
(Пятая запись (Another.html) - удалена на втором шаге).
Пятая запись (File.html). Находим еще 3 файла с таким же префиксом, удаляем их и удаляем записи с этим префиксом из файла tree.txt.
и т. д.
Остаётся желаемоеВот как-то так. Не умею реализовать это с помощью команд linuxCode:[Sep 16 13:33] Double.html-gzip-2883672-9165565-1347787944 [Sep 16 02:28] Another.html-gzip-2883620-1043150-1347745318 [Sep 15 23:36] Begin.html-gzip-2883711-354959-1347737586 [Sep 15 23:36] Content.html-gzip-2883623-424402-1347737434 [Sep 15 23:33] File.html-gzip-2883673-9141871-1347737585
Last edited by KRandall; 17-09-2012 at 13:35. Reason: Коррекция задачи
WL-500gP(v1, 64mb) (1.9.2.7-d-r2624 by Oleg) + 3 x USB HDD
Работают: analog, syslog-ng, cron, samba 3, RTorrent+RuTorrent, lighttpd, vsftpd+, настроена сеть и сетевая печать
© 2008-2013 ABATAPA WL-500gP/128M / Asus RT-N16 / USB Flash / VLAN / PPPoE / VoIP / nShaper / NAS: iStor is607, Sarotech NAS-20, QNap 109 Pro / NFS / Принтер / etc
Если не затруднит, чуть подробнее. Пока не пойму, как с помощью этих команд слепить нужный алгоритм
Хотя бы в общих чертах по шагам
WL-500gP(v1, 64mb) (1.9.2.7-d-r2624 by Oleg) + 3 x USB HDD
Работают: analog, syslog-ng, cron, samba 3, RTorrent+RuTorrent, lighttpd, vsftpd+, настроена сеть и сетевая печать
Знаете, учить - сложнее, чем делать самому.
В архиве тестовые файлы, и скрипт на perl.
parse.tgz
© 2008-2013 ABATAPA WL-500gP/128M / Asus RT-N16 / USB Flash / VLAN / PPPoE / VoIP / nShaper / NAS: iStor is607, Sarotech NAS-20, QNap 109 Pro / NFS / Принтер / etc
Code:#!/bin/sh DIR="$1" for file in `ls -1 $DIR | grep '^.*html-.*$'` do name=`echo "$file" | awk -F "-" '{print $1}'` for subfile in `ls -t $DIR | grep ^$name-.*\$ | sed '1d'` do rm ${DIR}/${subfile} done done exit 0;
© 2008-2013 ABATAPA WL-500gP/128M / Asus RT-N16 / USB Flash / VLAN / PPPoE / VoIP / nShaper / NAS: iStor is607, Sarotech NAS-20, QNap 109 Pro / NFS / Принтер / etc
Last edited by KRandall; 17-09-2012 at 19:16. Reason: Рекурсия
WL-500gP(v1, 64mb) (1.9.2.7-d-r2624 by Oleg) + 3 x USB HDD
Работают: analog, syslog-ng, cron, samba 3, RTorrent+RuTorrent, lighttpd, vsftpd+, настроена сеть и сетевая печать
Версия для Perl < 5.11 (в частности для Perl из текущего entware/optware):
parse-mipsel.tgz
Скрипт только печатает имена "нужных" файлов, не удаляя "лишние"!
Чтобы удалять, нужно добавить одну строчку...
Для рекурсивного обхода каталогов можно использовать `find -exec':
find /dir -type d -exec /path/to/parse-mipsel.pl {} \;
© 2008-2013 ABATAPA WL-500gP/128M / Asus RT-N16 / USB Flash / VLAN / PPPoE / VoIP / nShaper / NAS: iStor is607, Sarotech NAS-20, QNap 109 Pro / NFS / Принтер / etc
Про рекурсию уже написали:Code:#!/bin/sh DIR="$1" for file in `ls -1 "$DIR" | grep '^.*html-.*$' | sed 's/ /~~~bs~~~/g'` do name=`echo "$file" | awk -F "-" '{print $1}'` for subfile in `ls -t "$DIR" | grep ^$name-.*\$ | sed -e '1d' -e 's/ /~~~bs~~~/g'` do rm "${DIR}/`echo "${subfile}" | sed 's/~~~bs~~~/ /g'`" done done exit 0;
и в таком духе...Code:find <корневой каталог> -type d -exec <путь к скрипту> {} \;