конвейерный вывод команды поиска

Вот как я это исправил--

При загрузке Ubuntu Live CD мне пришлось изменить параметр загрузки Linux на acpi=off nomodeset debug=. Я считаю, что это было излишним, так как для загрузки Ubuntu мне нужно было просто использовать acpi=off.

Теперь --это отключило бы все мои acpi, поэтому у меня не было статистики батареи, и мой компьютер думал, что он находится в режиме полета --бесполезно. В конце концов я следовал пошаговому руководству, чтобы определить, почему проблема была в acpi, но оказалось, что это не так.

Все, что мне пришлось сделать, это добавить параметры загрузки acpi_osi=, потому что этот HP BIOS немного странный --, это решило все мои проблемы.

1
02.04.2020, 21:45
2 ответа

Вы можете добавить еще один -execк find, чтобы выполнить chmodдля файлов. Удалите -ls, если он вам не нужен :

.
find. -type f -name '*FW*' -exec grep -iEq 'chmod.*archive|archive.*chmod' {} \;\
  -ls -exec chmod 777 {} +
1
28.04.2021, 23:18

Вы можете добавить еще один -execв конце, чтобы обновить права доступа к файлам, прошедшим предыдущие тесты, , как показано Фредди , или вы можете объединить grepи chmodв встроенный sh -cскрипт:

find. -type f -name '*FW*' -exec sh -c '
    for pathname do
        if grep -q -i -e "chmod.*archive" -e "archive.*chmod" "$pathname"
        then
            chmod 777 "$pathname"
        fi
    done' sh {} +

Это будет использовать findкак своего рода генератор имен путей для цикла в скрипте sh -c.

Этот цикл берет все имена путей, заданные встроенному сценарию, проверяет каждый из них с помощью grep, и если шаблон совпадает в файле, этот файл получает свои разрешения (, возможно ), обновленные.


В bashвы можете вместо генерации путей с помощью findиспользовать шаблон подстановки имен файлов:

shopt -s globstar nullglob dotglob

for pathname in./**/*FW*; do
    if [ -f "$pathname" ] && grep -q -i -e 'chmod.*archive' -e 'archive.*chmod' "$pathname"
    then
        chmod 777 "$pathname"
    fi
done

Единственная видимая разница здесь заключается в том, что это также будет обрабатывать символические ссылки, которые соответствуют шаблону.

Параметр оболочки globstarвключает шаблон **, который рекурсивно сопоставляется с подкаталогами. Параметр оболочки nullglobзаставляет не совпадающие -шаблоны исчезать, а не оставаться нераскрытыми. Параметр оболочки dotglobзаставляет шаблоны соответствовать скрытым именам.

В оболочке zshэто может быть сокращено до

for pathname in./**/*FW*(.ND); do
    if grep -q -i -e 'chmod.*archive' -e 'archive.*chmod' $pathname
    then
        chmod 777 $pathname
    fi
done

... где ., Nи Dсоответствуют тесту -f(, но не соответствуют символическим ссылкам ), настройке nullglobи настройке dotglobв bash, в свою очередь.

1
28.04.2021, 23:18

Теги

Похожие вопросы