Я считаю, что это сделает то, что вам нужно. Он просматривает каждый каталог в свою очередь и проверяет, что нет «недавно измененных» файлов.
find * -type d |
while read DIR
do
LINES=$(find "$DIR" -maxdepth 1 -type f -mtime -5 -print -quit)
test -z "$LINES" && echo "$DIR NOT RECENTLY MODIFIED"
done
Если найдут ... -MaxDepth 1
не работает для вашей ситуации, не стесняйтесь изменить его на что-то вроде этого
LINES=$(find "$DIR" \( -type d -prune \) -o \( -type f -mtime -5 -print -quit \))
, и если вы хотите считать количество элементов, недавно измененных (или если -Quit
не доступен), это будет работать
LINES=$(find "$DIR" -maxdepth 1 -type f -mtime -5 | wc -l | tr -d' ')
test 0 -eq "$LINES" && echo "$DIR NOT RECENTLY MODIFIED" || echo "$DIR has $LINES recent file(s)"
Вы можете сделать это в Perl:
$ perl -lne 'if(/A=([^\s]+)/){print "A : $1"; `scriptA.sh`}
if(/B=([^\s]+)/){print "B : $1"; `scriptB.sh`}' Data.txt
-lne
: удаляйте новые строки из каждой входной строки и добавляйте новую строку к каждому вызову print
(-l
); читайте файл построчно (-n
) и запускайте скрипт, заданный -e
в каждой строке. if(/A=([^\s]+)/){выведите "A : $1"; `scriptA.sh`}
: если эта строка что-то соответствует A=
, выведите A : что-то
(круглые скобки означают, что шаблон захвачен и теперь сохранен как $1
) , затем запустите scriptA
. if(/B=([^\s]+)/){печать "B : $1"; `scriptB.sh`}
: как выше, но для B. Или вы можете просто извлечь значения и разобрать их:
$ grep -Po '[AB]=[^\s]+' Data.txt |
while IFS="=" read name val; do
echo "$name=$val";
[ "$name" = "A" ] && scriptA.sh || scriptB.sh;
done
grep -Po '[AB]=[^\s]+' Data. txt
: -P
включает PCRE, а -o
приведет к тому, что grep
выведет каждое совпадение на отдельную строку. Символ [AB]=[^\s]+
означает "соответствие A или B, затем =
, после чего как можно больше небелого пробела. Выводом этого является полная коллекция A=foo
и B=bar
из вашего входного файла, каждый из которых в своей строке. а IFS="=" считываем имя val
: установите разделитель ионных полей на =
и считываем две переменные. Это означает, что $name
будет A
или B
, а $value
будет значением, связанным с ними. echo "$name=$val";
: распечатайте их, измените формат на любой. ["$name" = "A" ] && scriptA.sh || scriptB.sh;
: если $name
это A
, запустите scriptA.sh
, в противном случае запустите scriptB.sh
.
Оба вышеприведенных решения предполагают, что вызываемые вами скрипты являются scriptA.sh
и scriptB.sh
, и что они находятся в вашем $PATH. Редактируйте соответственно.