Если Вы находитесь на Linux, Вы можете:
Смонтируйте свою корневую файловую систему на случайной точке монтирования. Я обычно использую /mnt
для этого вида вещей.
mount --bind / /mnt
Затем Вы можете (ре) перемещать файлы от /mnt/var
Не вся ОС позволяет файловую систему, смонтированную на второй точке монтирования одновременно, вот почему я записал 'на Linux'. Просто попробуйте монтирование, оно ничего не повредит.
Вы можете иметь grep
считайте их для Вас. При принятии строк Вы должны запуститься с 2
, можно использовать следующее:
grep -c '^[[:space:]]*2\>' $(find . -type f -print0 | xargs -0 echo)
\>
в конце regex гарантирует, что соответствие остановится на "границе слова" для предотвращения ложных аварийных сигналов, таких как строки, запускающиеся с 20 вместо 2.
Примечание:
Если "40 файлов" Вы ищете, все в том же каталоге (не в подкаталогах), можно сделать find
ищите текущий каталог только, не рекурсивно вызывая (так, чтобы Вы получили меньше задержки) как так:
find -maxdepth 1 . -type f -print0
Обновление:
Для соответствия файлам, где эти 2 происходит в другом столбце с первым можно сделать это:
COLNUM=3
TOMATCH=$(($COLNUM-1))
grep -cE "^[[:space:]]*([0-9]+[[:space:]]+){$TOMATCH}2\>" \
$(find . -type f -print0 | xargs -0 echo)
Можно измениться COLNUM
по мере необходимости. В основном то, что это делает, это пытается соответствовать COLNUM-1
столбцы, сопровождаемые 2 на границе слова. -E
переключатель необходим для включения расширенных регулярных выражений, который позволяет Вам использовать {}
нотация для определения числового квантора (т.е. 'соответствуют предыдущему шаблону это много раз').
Отметьте однако, что при вводе номера столбца, который не существует в файле, который regex приведет к сбою тихо.
Несколько решений:
выполниться awk
на каждом использовании файла find
-exec
опция:
find . -type f \
-exec awk '($1=="2"){++count}END{print FILENAME ": " count}' {} \;
используйте awk FNR
переменная для обнаружения файла изменяется в awk сценарии:
find . -type f -print0 | xargs -0 \
awk 'FNR==1{if (NR!=1){print count} printf("%s: ", FILENAME);}($1=="2"){++count}END{print count}'
Если Вы не возражаете изменять вывод, можно сделать следующее:
$ grep "^2" *|awk '{print $1}'|uniq -c
2 FILE_1:2
3 FILE_2:2
Если Вы хотите свой вывод ПЕЧАТИ:
$ grep "^2" *|awk '{print $1}'|uniq -c|sed 's/:2//'|awk '{print $2, $1}'
FILE_1 2
FILE_2 3
find
управляйте потребностями перечислить все файлы передgrep
начинается. При рассмотрении большого количества файлов конвейерные решения в других ответах являются, вероятно, более подходящими для Вас. – Joseph R. 10.07.2013, 23:36