как удалить все, кроме X последних элементов из find

Я хочу найти несколько папок и удалить все, кроме 10 последних.

Я могу find . -maxdepth 1 -type d -name "XXX*" | xargs rm -rf, но это уберет их всех.

Я не могу использовать head / tail, потому что я не знаю длину списка. Я думал о том, чтобы передать результат в wc -l и затем вычесть из него 10, а затем rm -rf его, но я не знаю, как ...

То, что я до сих пор придумывал, так это :

find . -maxdepth 1 -type d -name "XXX*" | # get the dirs list
wc -l | # count number
xargs -I{} expr {} - $(find . -maxdepth 1 -type d -name "XXX*") # send number to xargs and try to use expr to subtract from it the tail of the find

Я застрял в части expr и как сократить список, где я хочу

1
задан 29 April 2019 в 09:56

1 ответ

Вот вы:

find . -maxdepth 1 -type d -name "XXX*" -print0 | head -zn-10 | xargs -0 rm -rf

Я проверил это, работает нормально. Обратите внимание, что текущий каталог "." также считается, если -name "*"

Из man head :

-n, --lines = [-] NUM [ 115]
печатать первые NUM строки вместо первых 10; с начальным '-' выведите все NUM строки каждого файла, кроме последних

0
ответ дан 29 April 2019 в 09:56

Другие вопросы по тегам:

Похожие вопросы: