> On 17 Feb 2015, at 16:27, Vladislav V. Prodan <[email protected]> wrote:
> 
> 
> 
> 17 февраля 2015 г., 17:10 пользователь George L. Yermulnik <[email protected] 
> <mailto:[email protected]>> написал:
> Hello!
> 
> On Tue, 17 Feb 2015 at 04:34:05 (+0200), Vladislav V. Prodan wrote:
> 
> > # leave every fifth file, and the rest - remove
> > for i in `find $dir -type d`
> > do
> >     cd $i || exit;
> >     ls $i | grep snap-\*\.\*\.\*\.jpg | awk 'NR%5!=1' | xargs -I{} -n1 rm {}
> > done;
> 
> про -delete и xargs уже написали
> 
> Принято.
>  
> 
> я добавлю:
> 
> "cd $i || exit" - тут, вероятно, s/exit/continue/ - вряд ли задумано,
> чтобы скрипт отваливался на первой же "сбойнувшей" директории.
> 
> Именно exit , чтоб rm не сработал. Ибо при первом же сбое, очевидно, и сразу 
> пойдут другие сбои.
> 
>  
> 
> "ls $i | grep snap-\*\.\*\.\*\.jpg" - может быть будет немного быстрее,
> если заменить ls/grep на один find: find $i -type f -name "snap-*.*.*.jpg"
> 
> Да, надо заменить на find, хотя, в идеале написать на чистом awk, но тут хз с 
> производительностью.
> Я попытался дебажить, и подозреваю, что xargs -I{} -n1 rm {} очень медленно 
> работает, вызывает раз в секунду rm
> Так и хочется многопоточность засунуть, используя & в конце скрипта, но 
> боюсь, винтам не понравится овер 700 запросов.

А зачем Вы дергаете rm на каждый файл отдельно?
xargs -J % rm %

Ответить