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

7

Иногда я хочу запускать определенные файлы, но я не хочу полностью перемещаться по этой папке.

Если я знаю имя файла и find -name file_name.py возвращает только один результат, могу ли я просто использовать его?

Например, вместо перехода к определенной папке и вызова:

python file_name.py

Могу ли я написать:

python [ find -name file_name.py ] 

или

python [ locate file_name.py ]

Или какой-то вариант для поиска всего моего компьютера для этого имени и использования его? Предпочтительно в одной линии.

    
задан Charles Clayton 21.04.2014 в 22:11
источник

5 ответов

12

Я думаю, что вы ищете:

python $(find -name myscript.py)
    
ответ дан RobotHumans 21.04.2014 в 22:24
источник
5

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

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

python **/myscript.py

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

    
ответ дан Gilles 21.04.2014 в 22:29
1

Просто чтобы показать, что всегда есть много способов сделать что-то (даже без использования Perl):

find -name file_name.py -exec python {} \;

также будет работать. Функция exec для find выполняет следующую команду для каждого найденного файла. В этой команде {} действует как заполнитель для файла, а \; означает конец команды.

    
ответ дан Jos 22.04.2014 в 11:53
0

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

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

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

    
ответ дан jobin 21.04.2014 в 22:25
0

Другой:

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

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

    
ответ дан gniourf_gniourf 22.04.2014 в 12:18