То, что вы видите с ls, является записью mask ACL. Из man setfacl запись mask, по-видимому, отражает максимально возможные разрешения, которые могут быть установлены в записи ACL.
разрешения записи маски дополнительно корректируются, чтобы включить объединение всех разрешенных прав по записи маскиПрава доступа, которые вы видите в вашем примере с ls для группы по умолчанию root:rwx, ошибочны, поскольку эффективные права теперь контролируются ACL.
На всякий случай, если файлы очень большие, и два прохода на них дороги, и вы хотите только имена файлов, используя find + awk:
find . -type f -exec awk 'FNR == 1 {a=0; r=0} /AccessToken/{a=1} /Registrationrequest/{r=1} a && r {print FILENAME; nextfile}' {} +
, мы установили две переменные флага a и r, когда были найдены соответствующие шаблоны, очищенные в начале каждого файла (FNR == 1), когда обе переменные истинны, мы печатаем имя файла и переходим к следующему файлу. Следующая команда может распечатывать, когда файл соответствует критериям поиска:
grep -Zril 'String1' | xargs -0 grep -il 'String2'
Вот пример:
~/tmp$ ls
Dir1 Dir2 File1 File2
cat File1
AccessToken is not here
Registrationrequest it is here
cat File2
iAccess
ByteMe Registrationrequest
Я скопировал как File1, так и [ f7] в Dir1 и Dir2 для тестирования:
~/tmp$ grep -Zril 'AccessToken' | xargs -0 grep -il 'Registrationrequest'
File1
Dir2/File1
Dir1/File1
Затем, если вы хотите увидеть, что находится в файлах, добавьте следующее в конец поиска:
[ f4]Пример:
~/tmp$ grep -Zril 'AccessToken' | xargs -0 grep -il 'Registrationrequest' | xargs grep -E "AccessToken|Registrationrequest"
File1:AccessToken is not here
File1:Registrationrequest it is here
Dir2/File1:AccessToken is not here
Dir2/File1:Registrationrequest it is here
Dir1/File1:AccessToken is not here
Dir1/File1:Registrationrequest it is here
Надеюсь, это поможет!
grep -Erzl 'STR1.*STR2|STR2.*STR1'
, где опция -z заканчивается, разрывая файлы как одну строку.
Точнее:
grep -Erzl 'AccessToken.*Registrationrequest|Registrationrequest.*AccessToken'
Это может быть не так умно или ресурсоэффективно, как другие решения, но оно работает:
while read -rd '' filename; do
if grep -q "AccessToken" "$filename" &&
grep -q "Registrationrequest" "$filename"
then
echo "$filename"
fi
done < <(find . -type f -print0)
Это может быть не так умно или ресурсоэффективно, как другие решения, но оно работает:
while read -rd '' filename; do
if grep -q "AccessToken" "$filename" &&
grep -q "Registrationrequest" "$filename"
then
echo "$filename"
fi
done < <(find . -type f -print0)
grep -Erzl 'STR1.*STR2|STR2.*STR1'
, где опция -z заканчивается, разрывая файлы как одну строку.
Точнее:
grep -Erzl 'AccessToken.*Registrationrequest|Registrationrequest.*AccessToken'
Следующая команда может распечатывать, когда файл соответствует критериям поиска:
grep -Zril 'String1' | xargs -0 grep -il 'String2'
Вот пример:
~/tmp$ ls
Dir1 Dir2 File1 File2
cat File1
AccessToken is not here
Registrationrequest it is here
cat File2
iAccess
ByteMe Registrationrequest
Я скопировал как File1, так и File2 в Dir1 и Dir2 для тестирования:
~/tmp$ grep -Zril 'AccessToken' | xargs -0 grep -il 'Registrationrequest'
File1
Dir2/File1
Dir1/File1
Затем, если вы хотите увидеть, что находится в файлах, добавьте следующее в конец поиска:
xargs grep -E "AccessToken|Registrationrequest"
Пример:
~/tmp$ grep -Zril 'AccessToken' | xargs -0 grep -il 'Registrationrequest' | xargs grep -E "AccessToken|Registrationrequest"
File1:AccessToken is not here
File1:Registrationrequest it is here
Dir2/File1:AccessToken is not here
Dir2/File1:Registrationrequest it is here
Dir1/File1:AccessToken is not here
Dir1/File1:Registrationrequest it is here
Надеюсь, это поможет!