В первую очередь, это указывает на большую проблему. Если у Вас есть пользователи, которым Вы не доверяете в своей системе, необходимо, вероятно, выровнять ее и переизображение.
Имея это в виду, можно сделать некоторых или все следующее:
# set up the environment $ BADUSER=foo # where foo is the username in question $ USERLINE=$(grep '^${BADUSER}:' /etc/passwd) $ BADUID=$(echo ${USERLINE} | awk -F: '{print $3}') $ BADGID=$(echo ${USERLINE} | awk -F: '{print $4}') $ BADHOMEDIR=$(echo ${USERLINE} | awk -F: '{print $6}') $ BDIR="~/backup/home-backup/" $ TSTAMP=$(date +%F) $ TAR_FILENAME="${BADUSER}-${TSTAMP}.tar.bz2" $ OWNED_FILENAME="${BADUSER}-files-${TSTAMP}.txt" # disable the user's future login $ sudo chsh -s /bin/false "${BADUSER}" # kill all of the user's processes $ BADPROCS=$(ps auwx | grep '^${BADUSER} ' | awk '{print $2}') $ sudo kill -9 ${BADPROCS} # back up/clear the user's home directory $ mkdir -p ${BDIR} $ sudo tar -cfj ${BDIR}/${TAR_FILENAME} ${BADHOMEDIR} $ sudo rm -rf ${BADHOMEDIR}/.* ${BADHOMEDIR}/* # find all files owned by user $ sudo find / -user ${BADUSER} > ~/backup/${OWNED_FILENAME} # remove user $ sudo userdel ${BADUSER}
grep -l "string" * | wc -l
будет искать "строку" в содержании всех файлов в рабочем каталоге и говорить Вам сколько подобранный.
grep
s параметр -l
только произведет имена файлов, которые соответствуют $PATTERN
, wc
может считать их впоследствии.
grep -l "$PATTERN" * | wc -l
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *
Разъяснение: Это ищет количество файлов, которое имеет "pattern_to_look_for" в их содержании а не в их именах файлов (как ответ Взмаха). От Вашего вопроса трудно сказать то, что Вы ищете.
find . ! -name . -prune -type f
(не пропускайте обратные галочки). Эта команда только перечисляет файлы в папке.
– Jan Persson
29.01.2011, 23:11
Это работает в Bash с любым именем файла:
grep -lZ "$pattern" * | tr -cd '\000' | wc -c
Объяснение:
grep
-Z
опция печатает каждый результат с ␀ - разделитель байта. Этот символ не может быть частью имени файла, таким образом, мы можем просто считать количество разделителей для получения количества файлов.tr
.wc
.
grep -lr "string" directory | wc -l
Если Вы не хотите рекурсивный поиск, можно использовать, находят с maxdepth опцией:find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -l
Обратите внимание, что эта вторая опция медленнее, чем grep. – Agargara 17.10.2017, 03:09