Есть хранилище кадров с видеокамеры.
Директории вида - /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-тый кадр и удалить остальные?
>[оверквотинг удален]
> 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
> ...
>
awk 'NR%5==0'
> 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
>> 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
>
>>> 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 элементов.
>>>> awk 'NR%5==0'
> На досуге, протестируйте его на списке из 20-30 элементов.Done!
$ seq 31 |awk 'NR%5==0'
5
10
15
20
25
30
$ _
>> awk 'NR%5==0'
> Логики работы не понятная.$ cd /video/home/2013/09/17/02
$ ls |awk 'NR%5!=0' |xargs rmЛучше?
>>> awk 'NR%5==0'
>> Логики работы не понятная.
> $ cd /video/home/2013/09/17/02
> $ ls |awk 'NR%5!=0' |xargs rm
> Лучше?Тоже, только в профиль.
Нужно оставить 1,6,11,16.. элементы массива.
>> $ ls |awk 'NR%5!=0' |xargs rm
>> Лучше?
> Тоже, только в профиль.В смысле не понятно?
> Нужно оставить 1,6,11,16.. элементы массива.
ls |awk 'NR%5!=1' |xargs rm
Но соответственно в предположении, что имена в "нужном" порядке выдаются ls-ом (на linux-ах == лексикографический порядок = правильный), и что "высший" разум не будет это пускать два раза на одну и теж директорию.
Ну, мож
ls snap-*.png |awk ...
, если там поддиректории или др.файлы.Если хочется "математики", а не однострочник-хак, то, боюсь, однозначную или хотя достаточную постановку будет очень сложно в форуме получитью
>>> $ ls |awk 'NR%5!=0' |xargs rm
>>> Лучше?
>> Тоже, только в профиль.
> В смысле не понятно?
>> Нужно оставить 1,6,11,16.. элементы массива.
> Если хочется "математики", а не однострочник-хак, то, боюсь, однозначную или хотя достаточную
> постановку будет очень сложно в форуме получитьюПасиб, понял, что надо копать в сторону awk.
Проверю на длинном списке, как работает NR, если он действительно будет выбирать каждый 5 элемент списка, хоть и не с 1-го элемента, тогда, наверное, на нем и остановлюсь.
>[оверквотинг удален]
>>>> Лучше?
>>> Тоже, только в профиль.
>> В смысле не понятно?
>>> Нужно оставить 1,6,11,16.. элементы массива.
>> Если хочется "математики", а не однострочник-хак, то, боюсь, однозначную или хотя достаточную
>> постановку будет очень сложно в форуме получитью
> Пасиб, понял, что надо копать в сторону awk.
> Проверю на длинном списке, как работает NR, если он действительно будет выбирать
> каждый 5 элемент списка, хоть и не с 1-го элемента, тогда,
> наверное, на нем и остановлюсь.Вот так оставлю.
awk 'NR%5-1==0'
>[оверквотинг удален]
>>> Если хочется "математики", а не однострочник-хак, то, боюсь, однозначную или хотя достаточную
>>> постановку будет очень сложно в форуме получитью
>> Пасиб, понял, что надо копать в сторону awk.
>> Проверю на длинном списке, как работает NR, если он действительно будет выбирать
>> каждый 5 элемент списка, хоть и не с 1-го элемента, тогда,
>> наверное, на нем и остановлюсь.
> Вот так оставлю.
>
> awk 'NR%5-1==0'
>я таки непонял -- чем 'NR%5==1' не подошло? с арифметикой туговато?
find для обхода -- да!
>[оверквотинг удален]
> 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?
> Чем обходить эти директории?
> Через 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 | но тут с модальной алгеброй сложнее.
> for i in `find . -type d`и
> xargs rm
при таком подходе я бы крайне осмотрительно использовал пути в find - абсолютные однозначно, а то можно много веселья поиметь )))
>> for i in `find . -type d`
> и
>> xargs rm
> при таком подходе я бы крайне осмотрительно использовал пути в find -
> абсолютные однозначно, а то можно много веселья поиметь )))именно, только - print0 | xargs -0
>> Чем обходить эти директории?
>> Через 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;Проблема в том, что я получаю список всех директорий, а не _только_ последнего уровня.
find $i -maxdepth 1 -type f -name "snap-*.jpg" | awk 'NR%5!=1' | xargs -I{} -n1 rm {}
Вообще список странный строит. 10% файлов гробит зря...