Как передать '*' подстановочный знак в параметр пути команды find через переменную в скрипте?

Если вы используете проприетарные драйверы, вы можете установить программу под названием nvclock (для этого вы можете искать nvclock в программном центре Ubuntu).

Затем вы можете перейти в System -> Preferences -> Keyboard Shortcuts и создать 2 новых действия (яркость и яркость). Установите команды на nvclock -S +5 и nvclock -S -5 соответственно. Затем выберите ярлык для каждой команды. Обычно вы можете использовать свои клавиши яркости fn для этого (например, на моем ноутбуке fn + F7 и fn + F8).

Затем вы можете использовать эти ярлыки для изменения яркости.

В любое время вы можете нажать alt-f2 и ввести: nvclock -S x, где x - это номер, который представляет собой процентный экран яркость; например. nvclock -S 100 устанавливает максимальную яркость. Вы также можете привязать их к ярлыкам и использовать терминал вместо Alt-F2, если хотите.

Вы можете узнать больше о том, как использовать команду nvclock, введя man nvclock в терминал.

1
задан 21 November 2014 в 14:15

2 ответа

Как насчет массивов?

$ tree Desktop/ Documents/
Desktop/
└── my folder
    └── more
        └── file
Documents/
└── my folder
    ├── folder
    └── more

5 directories, 1 file
$ SEARCH=(D*/my\ folder)
$ find "${SEARCH[@]}" 
Desktop/my folder
Desktop/my folder/more
Desktop/my folder/more/file
Documents/my folder
Documents/my folder/more
Documents/my folder/folder

(*) расширяется в массив любых совпадений с шаблоном. И "${SEARCH[@]}" разворачивается во все элементы массива ([@]), каждый из которых отдельно указывается.

С опозданием я понимаю, что сама находка должна быть способна к этому. Что-то вроде:

find . -path 'D*/my folder/more/'
2
ответ дан 24 May 2018 в 03:54
  • 1
    Умная идея, но, увы, она не работает. Зачем? Потому что сам путь удерживается в переменной; следовательно, INPUTPATH='te*/my files/more и SEARCH=(${INPUTPATH}). Независимо от того, как я изменяю способ, которым я это делаю, у меня все же заканчивается нефункциональный результат. Это кажется невозможным! – Paddy Landau 21 November 2014 в 18:04
  • 2
    Конечно, все это так, но OP необходимо сделать это в скрипте. Это меняет ситуацию, так как расширение подстановок становится значительно более сложным, и это не работает. – terdon♦ 21 November 2014 в 18:05
  • 3
    @PaddyLandau В этом случае, почему вы не можете использовать фильтр find -path? Он использует подстановочные знаки и определенно не нуждается в расширении. – muru 21 November 2014 в 18:30
  • 4
    @muru Это интересно; Я не знал о -path. Тем не менее, за последние 10 минут я понял ответ: используйте eval! Это кажется более простым, чем -path. – Paddy Landau 21 November 2014 в 18:49
  • 5
    @terdon и muru и все: Спасибо. Я слышал, что вы все сказали, и я понял, что должен сделать свой сценарий, сделать что-то одно, и позволить Bash globbing пропускать несколько файлов или путей к скрипту. Таким образом, я изменил свой сценарий. Он работает хорошо и лучше подходит для философии Linux. Еще раз спасибо! – Paddy Landau 22 November 2014 в 19:47

Я наконец нашел ответ.

Добавить обратную косую черту во все пробелы:

SEARCH='te*/my files/more'
SEARCH=${SEARCH// /\\ }

В этот момент SEARCH содержит te*/my\ files/more. [!d2 ]

Затем используйте eval.

eval find ${SEARCH} -print

Это так просто! Использование eval обходит интерпретацию ${SEARCH} от переменной.

0
ответ дан 24 May 2018 в 03:54
  • 1
  • 2
    @terdon Спасибо за предупреждение. Вернуться к доске для рисования! – Paddy Landau 22 November 2014 в 14:55
  • 3
    Да, это удивительно сложно. Я просто обновил свой ответ с помощью другого подхода, почему бы не использовать globbing вместо этого? Если это все еще не работает, я предлагаю вам опубликовать новый вопрос на Unix & Linux , объясняющий, какова ваша конечная цель и почему вам нужно иметь шаблон как переменную. Этот тип вещей лучше, чтобы получить лучший ответ. – terdon♦ 22 November 2014 в 15:47

Другие вопросы по тегам:

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