Используя оболочку zsh
, список всех обычных файлов в текущем каталоге и ниже, отсортированный в порядке убывания по размеру, задается шаблоном сглаживания
./**/*(.NOL)
.
в квалификатор globbing (.NOL)
заставляет шаблон соответствовать только обычным файлам, в то время как N
расширяет шаблон до нуля, если здесь нет соответствия (как если бы bash
использовалось в *1009*), а OL
упорядочивает совпадает по длине / размеру в порядке убывания.
Проходя по ним, пока файл не содержит строку x265
:
for pathname in ./**/*(.NOL); do
if ! grep -qF 'x265' $pathname; then
break
fi
done
Значение $pathname
будет наибольшим файл, не содержащий строку x265
.
Чтобы получить массив этих файлов, вы можете сделать
files=( ./**/*(.NOLe['! grep -qF x265 $REPLY']) )
, чтобы получить массив только первых 10 таких файлов (то есть 10 самые большие файлы, не содержащие строку x265
):
files=( ./**/*(.NOLe['! grep -qF x265 $REPLY'][1,10]) )
Чтобы напечатать значения массива в одном столбце:
print -rC1 -- $files
To l oop по 10 файлам , используйте
for pathname in ./**/*(.NOLe['! grep -qF x265 $REPLY'][1,10])
do
# process $pathname here
done
или
files=( ./**/*(.NOLe['! grep -qF x265 $REPLY'][1,10]) )
for pathname in $files; do
# process $pathname here
done
Обратите внимание, что t grep -q -v expression
очень отличается от ! grep -q expression
. Первое вернет true , если есть строки, которые не соответствуют expression
, а второе вернет true , если нет строк, соответствующих expression
.