Я хочу перенаправить вывод find
команды на cat
команду, чтобы я мог распечатать данные данного файла.
Так, например, если результат поиска - это /aFile/readme
то, кот должен интерпретироваться как cat ./aFile/readme
. Как я могу сделать это мгновенно?
Должен ли я использовать трубы?
Я попробовал версии этого:
cat | find ./inhere -size 1033c 2> /dev/null
Но я полагаю, это совершенно неправильно? Конечно, я уверен, что на выходе будет только один файл, а не несколько файлов.
Так как я могу это сделать? Я искал в Google и не мог найти решение, вероятно, потому что я не правильно искал: P
cat
«S-n
варианта меня удивляет. Я люблю читать случайные вопросы.Подстановка команд
Другой вариант - использовать подстановку команд . Перенос команды в
$()
запустит команду и заменит команду ее выводом.станет
Это более или менее эквивалентно использованию более старого стиля переноса команд с обратными галочками:
Более подробная информация из документов, связанных выше
Bash выполняет расширение, выполняя команду в среде подоболочек и заменяя подстановку команды стандартным выводом команды, удаляя все завершающие символы новой строки. Введенные новые строки не удаляются, но они могут быть удалены во время разделения слов. Подстановка команд
$(cat file)
может быть заменена эквивалентной, но более быстрой$(< file)
.Когда старый стиль форма кавычки замещения используются, обратный слеш сохраняет свое буквальное значение , за исключением , когда следует
$
,`
или\
. Первая обратная кавычка, которой не предшествует обратная косая черта, завершает подстановку команды. При использовании$(command)
формы все символы в скобках составляют команду; никто не лечится специально.Подстановки команд могут быть вложенными. Чтобы вкладывать при использовании формы с обратными кавычками, избегайте внутренних обратных кавычек с помощью обратной косой черты.
Если подстановка встречается в двойных кавычках, разделение слов и расширение имени файла не выполняются.
Посмотрите этот другой ответ для некоторых хороших примеров использования.
источник
find
находит слишком много файлов, это приведет к ошибке «список аргументов слишком длинный» при попытке вызоваcat
. Также могут возникнуть проблемы с обработкой имен файлов, содержащих пробельные символы, и, возможно, также имен файлов, содержащих символы-заглушки.Это напечатает имя и содержимое текстовых (ascii) файлов только для рекурсии.
Еще одна попытка
источник
Используйте трубу и Xargs
Если произойдет сбой из-за отсутствия разрешений, вы можете использовать sudo, чтобы убедиться, что у вас есть разрешение на выполнение команды поиска в каталоге, который вы ищете.
источник
/tmp/ /dev/urandom /pg_hba.conf
, это позволит root выгружать все содержимое/dev/urandom
. Хуже, вероятно, может быть сделано в зависимости от контекста.xargs
почти никогда не должен использоваться без,-0
если вообще. Иsudo xargs
было бы лучше, чемxargs sudo
. И/*
было бы лучше как/
.find|xargs
без-0
должен быть действительно запрещен), следовательно, голосование против. Выходfind
без-print0
постобработки надежно.-print0
не является стандартным Сказав это, стандартsudo find / -name pg_hba.conf -exec cat {} +
также может заставить вас сбросить содержимое/dev/urandom
(например, если кто-то создал символическую ссылку/tmp/pg_hba.conf
на него, и нет простого переносимого пути, который, по крайней мере, не имеет состояния гонки).sudo
«на всякий случай», не так ли?sudo rm -rf /