Page 6 of 9 FirstFirst ... 45678 ... LastLast
Results 76 to 90 of 127

Thread: Вопросы по скриптам на bash (shell)

  1. #76
    Join Date
    Mar 2011
    Location
    UA
    Posts
    222

    Lightbulb bash

    Плз., подскажите, можно ли в shell-скриптах использовать массивы? Или такой возможности для bash в прошивках нет?! Может вопрос и поднимался - да не нашел...
    RT-N16 + Entware repo

  2. #77
    Join Date
    Jan 2011
    Location
    Нижний Новгород
    Posts
    543
    Quote Originally Posted by voidshah View Post
    Плз., подскажите, можно ли в shell-скриптах использовать массивы? Или такой возможности для bash в прошивках нет?! Может вопрос и поднимался - да не нашел...
    Мои попытки успехом не увенчались. В awk - получилось.
    DIR-320 & RTN-r3297 from USB>r3478>r3539>r3722>r3815>r3877>r4051>r4990>r5163

  3. #78
    Join Date
    Mar 2011
    Location
    UA
    Posts
    222
    Спс, будем страдать с awk
    offtop Может кто букварь нормальный по нему подскажет?
    RT-N16 + Entware repo

  4. #79
    Join Date
    Jan 2011
    Location
    Нижний Новгород
    Posts
    543
    Quote Originally Posted by voidshah View Post
    Спс, будем страдать с awk
    offtop Может кто букварь нормальный по нему подскажет?
    держи букварь - http://ss64.com/bash/
    Attached Files Attached Files
    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

  5. #80
    Join Date
    Jan 2007
    Location
    Moscow
    Posts
    156

    Question Удаление файлов по префиксу и дате (помогите с решением)

    Доброго времени суток

    Помогите пожалуйста с решением небольшой задачи

    Из файлов, сгруппированных по префиксу 'Имя.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+, настроена сеть и сетевая печать

  6. #81
    Join Date
    Nov 2009
    Location
    Kyiv, Ukraine
    Posts
    142

  7. #82
    Join Date
    Jan 2007
    Location
    Moscow
    Posts
    156

    Lightbulb Удаление файлов по префиксу и дате создания

    Спасибо, но это немного не то.

    В моём случае префикс у файлов разный, даты создания в имени файла нет и еще нужен какой-то механизм выбора файла по дате создания из группы файлов с одним префиксом

    Вот например такой алгоритм.
    Выводим список файлов в каталоге с помощью tree (сортируем по дате создания по убыванию - tree -D -N -C -t -i -o 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
    Далее делаем цикл по записям файла tree.txt.
    Первая запись (Double.html). Файлов с таким префиксом в цикле не находим - ничего не делаем.
    Вторая запись (Another.html). Находим файл с таким же префиксом в 5-й записи, удаляем файл с этим именем и удаляем записи с найденным префиксом из файла tree.txt.
    Третья запись (Begin.html). Файлов с таким префиксом в цикле не находим - ничего не делаем.
    Четвёртая запись (Content.html). Находим файл с таким же префиксом в 8-й записи, удаляем файл с этим именем и удаляем записи с этим префиксом из файла tree.txt.
    (Пятая запись (Another.html) - удалена на втором шаге).
    Пятая запись (File.html). Находим еще 3 файла с таким же префиксом, удаляем их и удаляем записи с этим префиксом из файла 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:33]  File.html-gzip-2883673-9141871-1347737585
    Вот как-то так. Не умею реализовать это с помощью команд linux
    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+, настроена сеть и сетевая печать

  8. #83
    Quote Originally Posted by KRandall View Post
    Помогите пожалуйста с решением небольшой задачи
    Помогаю: есть find, есть ls с ключем '-t'
    Далее, надеюсь, понятно.
    © 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

  9. #84
    Join Date
    Jan 2007
    Location
    Moscow
    Posts
    156

    Question

    Если не затруднит, чуть подробнее. Пока не пойму, как с помощью этих команд слепить нужный алгоритм
    Хотя бы в общих чертах по шагам
    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+, настроена сеть и сетевая печать

  10. #85
    Quote Originally Posted by KRandall View Post
    Если не затруднит, чуть подробнее. Пока не пойму, как с помощью этих команд слепить нужный алгоритм
    Хотя бы в общих чертах по шагам
    Знаете, учить - сложнее, чем делать самому.
    В архиве тестовые файлы, и скрипт на 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

  11. #86
    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;

  12. #87
    Quote Originally Posted by Orex View Post
    [code]#!/bin/sh
    do
    rm ${DIR}/${subfile}
    done
    2. Этот код не будет работать с пробелами в именах файлов или каталогов.
    © 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

  13. #88
    Join Date
    Jan 2007
    Location
    Moscow
    Posts
    156

    Smile Спасибо

    Quote Originally Posted by Orex View Post
    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;
    Спасибо, работает

    А как сделать рекурсию по вложенным каталогам?
    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+, настроена сеть и сетевая печать

  14. #89
    Quote Originally Posted by ABATAPA View Post
    В архиве тестовые файлы, и скрипт на perl.
    Версия для 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

  15. #90
    Quote Originally Posted by ABATAPA View Post
    2. Этот код не будет работать с пробелами в именах файлов или каталогов.
    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;
    Quote Originally Posted by KRandall View Post
    А как сделать рекурсию по вложенным каталогам?
    Про рекурсию уже написали:

    Code:
    find <корневой каталог> -type d -exec <путь к скрипту> {} \;
    и в таком духе...

Page 6 of 9 FirstFirst ... 45678 ... LastLast

Similar Threads

  1. FAQ: часто задаваемые вопросы
    By Oleg in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 56
    Last Post: 13-09-2016, 12:06
  2. Вопросы по работе IPTV (EMF & WMF)
    By theMIROn in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 119
    Last Post: 29-03-2015, 13:18
  3. Вопросы по работе PHP на роутере
    By Jekl in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 164
    Last Post: 21-10-2014, 12:45
  4. Wifi connect client bash script export.
    By aegisrtcw in forum WL-500gP Q&A
    Replies: 0
    Last Post: 25-04-2012, 05:36
  5. Вопросы по перепрошивке dir-320
    By gweri in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 344
    Last Post: 29-10-2011, 10:36

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •