2015-02-09 5 views
7

Следующая команда:Как ограничить результаты команды find в bash?

find . -name "file2015-0*" -exec mv {} .. \; 

Влияет около 1500 результатов. Один за другим они перемещают предыдущий уровень.

Если бы я хотел, чтобы результаты не превышали, например, в 400? Как я мог?

+2

Если есть 1500 результаты, которые 400 она должна выбрать? Даже с детерминированным способом (например, в алфавитном порядке) было бы трудно угадать, какие файлы могут быть возвращены или нет. Вы должны объяснить более широко, что вы пытаетесь выполнить. – FatalError

+0

Привет, Федорки, спасибо за ваш ответ! –

+0

Привет, Федорки, спасибо за ваш ответ! Это не имеет значения, заказ, всего около 400 результатов на tiime. Идея состоит в том, чтобы переместить 400 файлов, потому что другой процесс, выполняющийся на предыдущем уровне, снижает его производительность. Я имею в виду, для этого примера будут великолепные ходы в четырех частях: 1-й из 400, 2-й из 400, 3-й из 400 и 4-й из 300. BR! –

ответ

8

Вы можете сделать это:

find . -name "file2015-0*" | head -400 | xargs -I filename mv filename .. 

Если вы хотите, чтобы имитировать то, что он действительно использует echo:

find . -name "file2015-0*" | head -400 | xargs -I filename echo mv filename .. 
+0

Отлично! Большое спасибо Тьягу! –

+0

Рад, что это помогло! пожалуйста, примите ответ, если вы считаете, что это лучший. – Tiago

+0

Да! Я соглашусь! Действительно, я искал параметр «найти», чтобы остановить его, когда найденные результаты 400 (например, crtl C, но работают в одиночку :)). Этот способ может быть применен к большому количеству более 1500, и доступ к диску не будет интенсивным. В любом случае, сегодня за 1500 его действительно отлично! BR Mariano –

0

Вы можете, например, обеспечить find выход в while read петли и следить за счетчиком:

counter=1 
while IFS= read -r file 
do 
    [ "$counter" -ge 400 ] && exit 
    mv "$file" .. 
    ((counter++)) 
done < <(find . -name "file2015-0*") 

Примечания это может привести к проблемам, если имя файла содержит новые строки ... что весьма маловероятно, , Также обратите внимание, что команда mv теперь перемещается на верхний уровень. Если вы хотите, чтобы это было связано с контуром каталога, это может сделать некоторое преобразование bash.

Смежные вопросы