Как я могу объединить команду find с другими командами, поэтому мне не нужно переходить к папке?

установите тему пользовательского расширения оболочки gnome, даже если она дает ошибку, затем запускает следующие две команды

sudo cp $HOME/.local/share/gnome-shell/extensions/user-theme@gnome-shell-extensions.gcampax.github.com/schemas/org.gnome.shell.extensions.user-theme.gschema.xml /usr/share/glib-2.0/schemas
sudo glib-compile-schemas /usr/share/glib-2.0/schemas

после перезагрузки оболочки att + f2, затем выполняется r

здесь ссылка, где я получил решение http://www.fandigital.com/2012/09/fix-user-themes-gnome-shell-extension.html

1
задан 22 April 2014 в 10:45

4 ответа

Добавьте строку shopt -s globstar в файл .bashrc в вашем домашнем каталоге. (Чтобы просто попробовать это, введите это в командной строке, это вступит в силу только в вашей текущей оболочке.)

Затем вы можете использовать **/ для обозначения «в текущем каталоге или подкаталоге и так что это рекурсивно », т. е. то же самое, что и простые команды find.

python **/myscript.py

Предостережение: **/ перемещает символические ссылки на каталоги, тогда как find - нет. В bash вы не можете этого избежать. В zsh **/ доступен из коробки и не пересекает символические ссылки (есть ***/ для редких случаев, когда вы хотите пересечь символические ссылки).

5
ответ дан 24 May 2018 в 09:04
  • 1
    Этот, безусловно, самый быстрый тип (и, вероятно, мой любимый тоже)! С другой стороны, если ваш каталог раздувается, это может быть очень долго, так как mashanism bash's globbing включает в себя сортировку файлов! в этом отношении методы, связанные с find, могут быть более восприимчивыми. – gniourf_gniourf 22 April 2014 в 17:22
  • 2
    @gniourf_gniourf Сортировка выполняется быстро, это происходит в памяти, во времени Θ (n log (n)), которое близко к Θ (n) для чтения. **/ немного медленнее, чем find, потому что find имеет оптимизацию, которая не вызывает stat для файлов в каталогах листьев. Вызов find …| … или find … -exec … \; более чувствителен, потому что файлы могут быть обработаны, как только они будут найдены, но $(find …) должен пройти сначала по всему дереву так же, как **/. – Gilles 22 April 2014 в 18:53
  • 3
    Это также очень удобно. – Charles Clayton 23 April 2014 в 01:46

Просто чтобы показать, что всегда есть много способов сделать что-то (даже без использования Perl): find -name file_name.py -exec python {} \; также будет работать. Функция exec для find выполняет следующую команду для каждого найденного файла. В этой команде {} действует как заполнитель для файла, а \; означает конец команды.

1
ответ дан 24 May 2018 в 09:04
  • 1
    если вы добавите -quit в конце команды find, это хороший ответ: find -name file_name.py -exec python {} \; -quit – gniourf_gniourf 22 April 2014 в 17:12
  • 2
    @gniourf_gniourf А, спасибо за это. Да, вы можете захотеть, чтобы команда завершила работу после обработки первого найденного файла. – Jos 22 April 2014 в 17:16

Вы можете сохранить вывод find в переменной и делать с ним все, что хотите:

file=`find -name file_name.py` && python $file

find -name file_name.py будет искать файлы с именем file_name.py и сохранять результат в file, и если команда выполнена успешно (результаты получены без ошибок), python интерпретирует $file.

0
ответ дан 24 May 2018 в 09:04

Еще один:

xargs -0 python < <(find -name my_script.py -print0 -quit)

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

0
ответ дан 24 May 2018 в 09:04

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

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