URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9806
[ Назад ]

Исходное сообщение
"Нужно подчистить хранилище картинок"

Отправлено universite , 04-Янв-14 15:36 

Есть хранилище кадров с видеокамеры.
Директории вида - /video/home/2013/09/17/02
Содержимое директории:


snap-02.00.00.jpg
snap-02.00.05.jpg
snap-02.00.10.jpg
snap-02.00.14.jpg
snap-02.00.18.jpg
snap-02.00.22.jpg
snap-02.00.26.jpg
snap-02.00.30.jpg
snap-02.00.34.jpg
snap-02.00.38.jpg
snap-02.00.43.jpg
snap-02.00.47.jpg
snap-02.00.51.jpg
snap-02.00.55.jpg
...

Как оставить, например, каждый 5-тый кадр и удалить остальные?


Содержание

Сообщения в этом обсуждении
"Нужно подчистить хранилище картинок"
Отправлено pavel_simple , 04-Янв-14 19:04 
>[оверквотинг удален]
> snap-02.00.30.jpg
> snap-02.00.34.jpg
> snap-02.00.38.jpg
> snap-02.00.43.jpg
> snap-02.00.47.jpg
> snap-02.00.51.jpg
> snap-02.00.55.jpg
> ...
>

> Как оставить, например, каждый 5-тый кадр и удалить остальные?

awk 'NR%5==0'


"Нужно подчистить хранилище картинок"
Отправлено universite , 04-Янв-14 19:40 

> awk 'NR%5==0'

Логики работы не понятная.


# ll
total 5
-rw-r--r--  1 root  wheel  985 21 сен 01:10 Makefile
-rw-r--r--  1 root  wheel  128 14 июл  2012 distinfo
drwxr-xr-x  2 root  wheel    9 12 окт 22:22 files
-rw-r--r--  1 root  wheel  134 14 июл  2012 pkg-descr
# ll | awk 'NR%2==0'
-rw-r--r--  1 root  wheel  985 21 сен 01:10 Makefile
drwxr-xr-x  2 root  wheel    9 12 окт 22:22 files
# ll | awk 'NR%3==0'
-rw-r--r--  1 root  wheel  128 14 июл  2012 distinfo
# ll | awk 'NR%4==0'
drwxr-xr-x  2 root  wheel    9 12 окт 22:22 files
# ll | awk 'NR%5==0'
-rw-r--r--  1 root  wheel  134 14 июл  2012 pkg-descr


"Нужно подчистить хранилище картинок"
Отправлено pavel_simple , 04-Янв-14 23:09 
>> awk 'NR%5==0'
> Логики работы не понятная.

какие роботы? непонятная кто? man не перевели? кто такой ll? No manual entry for ll.

       NR          The total number of input records seen so far.
http://www.gnu.org/software/gawk/manual/html_node/Arithmetic...
x % y
    Remainder; further discussion is provided in the text, just after this list.
When computing the remainder of ‘x % y’, the quotient is rounded toward zero to an integer and multiplied by y. This result is subtracted from x; this operation is sometimes known as “trunc-mod.” The following relation always holds:

     b * int(a / b) + (a % b) == a

"==" объяснять?

>[оверквотинг удален]
> # ll | awk 'NR%3==0'
> -rw-r--r--  1 root  wheel  128 14 июл  2012
> distinfo
> # ll | awk 'NR%4==0'
> drwxr-xr-x  2 root  wheel    9 12 окт
> 22:22 files
> # ll | awk 'NR%5==0'
> -rw-r--r--  1 root  wheel  134 14 июл  2012
> pkg-descr
>


"Нужно подчистить хранилище картинок"
Отправлено universite , 05-Янв-14 00:23 
>>> awk 'NR%5==0'
>> Логики работы не понятная.
> какие роботы? непонятная кто? man не перевели? кто такой ll? No manual
> entry for ll.
>        NR    
>      The total number of input records
> seen so far.
> http://www.gnu.org/software/gawk/manual/html_node/Arithmetic...
> x % y

Этот операнд не подходит условию задачи.
На досуге, протестируйте его на списке из 20-30 элементов.


"Нужно подчистить хранилище картинок"
Отправлено Andrey Mitrofanov , 05-Янв-14 00:35 
>>>> awk 'NR%5==0'
> На досуге, протестируйте его на списке из 20-30 элементов.

Done!

$ seq 31 |awk 'NR%5==0'
5
10
15
20
25
30
$ _


"Нужно подчистить хранилище картинок"
Отправлено Andrey Mitrofanov , 04-Янв-14 23:18 
>> awk 'NR%5==0'
> Логики работы не понятная.

$ cd /video/home/2013/09/17/02
$ ls |awk 'NR%5!=0' |xargs rm

Лучше?


"Нужно подчистить хранилище картинок"
Отправлено universite , 05-Янв-14 00:24 
>>> awk 'NR%5==0'
>> Логики работы не понятная.
> $ cd /video/home/2013/09/17/02
> $ ls |awk 'NR%5!=0' |xargs rm
> Лучше?

Тоже, только в профиль.
Нужно оставить 1,6,11,16.. элементы массива.


"Нужно подчистить хранилище картинок"
Отправлено Andrey Mitrofanov , 05-Янв-14 00:32 
>> $ ls |awk 'NR%5!=0' |xargs rm
>> Лучше?
> Тоже, только в профиль.

В смысле не понятно?

> Нужно оставить 1,6,11,16.. элементы массива.

ls |awk 'NR%5!=1' |xargs rm

Но соответственно в предположении, что имена в "нужном" порядке выдаются ls-ом (на linux-ах == лексикографический порядок = правильный), и что "высший" разум не будет это пускать два раза на одну и теж директорию.

Ну, мож
   ls snap-*.png |awk ...
, если там поддиректории или др.файлы.

Если хочется "математики", а не однострочник-хак, то, боюсь, однозначную или хотя достаточную постановку будет очень сложно в форуме получитью


"Нужно подчистить хранилище картинок"
Отправлено universite , 05-Янв-14 00:50 
>>> $ ls |awk 'NR%5!=0' |xargs rm
>>> Лучше?
>> Тоже, только в профиль.
> В смысле не понятно?
>> Нужно оставить 1,6,11,16.. элементы массива.
> Если хочется "математики", а не однострочник-хак, то, боюсь, однозначную или хотя достаточную
> постановку будет очень сложно в форуме получитью

Пасиб, понял, что надо копать в сторону awk.
Проверю на длинном списке, как работает NR, если он действительно будет выбирать каждый 5 элемент списка, хоть и не с 1-го элемента, тогда, наверное, на нем и остановлюсь.


"Нужно подчистить хранилище картинок"
Отправлено universite , 05-Янв-14 00:54 
>[оверквотинг удален]
>>>> Лучше?
>>> Тоже, только в профиль.
>> В смысле не понятно?
>>> Нужно оставить 1,6,11,16.. элементы массива.
>> Если хочется "математики", а не однострочник-хак, то, боюсь, однозначную или хотя достаточную
>> постановку будет очень сложно в форуме получитью
> Пасиб, понял, что надо копать в сторону awk.
> Проверю на длинном списке, как работает NR, если он действительно будет выбирать
> каждый 5 элемент списка, хоть и не с 1-го элемента, тогда,
> наверное, на нем и остановлюсь.

Вот так оставлю.


awk 'NR%5-1==0'


"Нужно подчистить хранилище картинок"
Отправлено pavel_simple , 05-Янв-14 02:42 
>[оверквотинг удален]
>>> Если хочется "математики", а не однострочник-хак, то, боюсь, однозначную или хотя достаточную
>>> постановку будет очень сложно в форуме получитью
>> Пасиб, понял, что надо копать в сторону awk.
>> Проверю на длинном списке, как работает NR, если он действительно будет выбирать
>> каждый 5 элемент списка, хоть и не с 1-го элемента, тогда,
>> наверное, на нем и остановлюсь.
> Вот так оставлю.
>
 
> awk 'NR%5-1==0'
>

я таки непонял -- чем 'NR%5==1' не подошло? с арифметикой туговато?

find для обхода -- да!


"Нужно подчистить хранилище картинок"
Отправлено universite , 05-Янв-14 00:56 
>[оверквотинг удален]
> snap-02.00.30.jpg
> snap-02.00.34.jpg
> snap-02.00.38.jpg
> snap-02.00.43.jpg
> snap-02.00.47.jpg
> snap-02.00.51.jpg
> snap-02.00.55.jpg
> ...
>
> Как оставить, например, каждый 5-тый кадр и удалить остальные?

Еще под-вопрос.

Чем обходить эти директории?
Через find?



"Нужно подчистить хранилище картинок"
Отправлено pavlinux , 07-Янв-14 20:44 
> Чем обходить эти директории?
> Через find?

1.
for i in `find . -type d`
do
    cd $i;
          exec ля-ля-ля;
    сd -;
done;

2.
for i in `find . -type d`
do
    pushd .;
    cd $i;
          exec ля-ля-ля;
    popd;
done;

3. find -type d | xargs exec ля-ля-ля

4. find -type d -exec ля-ля-ля {} \;

5. ls -R | но тут с модальной алгеброй сложнее.


"Нужно подчистить хранилище картинок"
Отправлено Pahanivo , 10-Янв-14 09:28 
> for i in `find . -type d`

и

> xargs rm

при таком подходе я бы крайне осмотрительно использовал пути в find - абсолютные однозначно, а то можно много веселья поиметь )))


"Нужно подчистить хранилище картинок"
Отправлено pavel_simple , 10-Янв-14 09:55 
>> for i in `find . -type d`
> и
>> xargs rm
> при таком подходе я бы крайне осмотрительно использовал пути в find -
> абсолютные однозначно, а то можно много веселья поиметь )))

именно, только - print0 | xargs -0


"Нужно подчистить хранилище картинок"
Отправлено universite , 02-Мрт-14 18:22 
>> Чем обходить эти директории?
>> Через find?
> 1.
> for i in `find . -type d`
>  do
>     cd $i;
>           exec ля-ля-ля;
>     сd -;
> done;


for i in `find $dir -type d`
do
    cd $i;
    ls $i | awk 'NR%5!=1'
done;

Проблема в том, что я получаю список всех директорий, а не _только_ последнего уровня.


"Нужно подчистить хранилище картинок"
Отправлено universite , 02-Мрт-14 18:58 


find $i -maxdepth 1 -type f -name "snap-*.jpg" | awk 'NR%5!=1' | xargs -I{} -n1 rm {}

Вообще список странный строит. 10% файлов гробит зря...