Найденный файл найден командой find

12

Это, вероятно, легко, но я не могу понять это, и это в значительной степени не для поиска. В иерархии папок у меня есть ровно один файл типа xyz. Я хочу найти этот файл и открыть его с помощью команды терминала.

find . -name *.xyz

Это вернет файл, который я ищу. Теперь, как мне открыть его автоматически, не вводя имя?

find . -name *xyz | open

Это не работает Там написано, что команда open не найдена.


источник
3
Что это за файл? Если это не исполняемый файл, то с какой программой вы хотите открыть файл? О, что Windows сделала с нашим населением = /
chown
Это, вероятно, принадлежит суперпользователю ...
пересмотр
1
Я на Mac, а не Windows ... и я хочу открыть файл с программой по умолчанию.
2
найти . имя * xyz | xargs открой и найди. -name * .xyz -exec open {} \; оба работали. Спасибо.
Я рад, что вы нашли решение. Не забудьте отметить решение, которое сработало «лучше» для вас. Другие увидят ваше отношение «принятия», и это будет иметь большое значение при задании будущих вопросов. Пользователи с более низким коэффициентом приемлемости часто считают, что их вопросы игнорируются. =)
Матч

Ответы:

10

@retracile правильно. Вы должны открыть это с «чем-то». Однако я предпочитаю использовать exec вместо xargs.

find . -name '*.xyz' -exec cat {} \;

это вернет и cat fileFound.xyz; cat fileFound2.xyx;т. д. Однако вы ожидаете найти только один файл.

обратите внимание, что переход \;в режим +возврата будет cat fileFound.xyz fileFound2.xyzзависеть от случая, когда позднее, возможно, предпочтительный вариант.

подробнее об этом я бы направил вас на этот вопрос

matchew
источник
6

Команда, которую вы ищете, называется xdg-open

Попробуйте свою команду с этим:

xdg-open "$(find . -name '*xyz' | head -n1)"
static_rtti
источник
6

Вам нужно знать, какую программу вы хотите использовать, чтобы открыть файл. Если это изображение, вы можете использовать gwenview или что-то еще.

Взятие ввода и превращение его в аргументы выполняется с помощью xargs. И вы захотите избежать этого символа ...

find . -name \*xyz | xargs gwenview

И обрабатывать пробелы в именах файлов ....

find . -name \*xyz | xargs -d"\n" gwenview
retracile
источник
2

Как уже отмечали другие, ваш вопрос недостаточно конкретен, чтобы дать четкий ответ. Итак, угадайте другое возможное значение: если вы имеете в виду, что хотите запустить его как исполняемый файл (то есть, что ваша программа является исполняемым), скажите оболочке, что вы хотите заменить вывод команды find частью командной строки. :

$(find . -name *.xyz)
MKJ
источник
0

Если вы хотите открыть все файлы, найденные на findотдельных вкладках в одном экземпляре vim, вы можете сделать это:

find . -name \*xyz | xargs vim -p
Кори Кляйн
источник