Cat with find linux

Как передать список файлов, возвращенных командой find в cat для просмотра всех файлов

Я делаю find а затем получение списка файлов. Как я могу передать его другой утилите, такой как cat (Так что cat отображает содержимое всех этих файлов) и в основном нужно grep что-то из этих файлов.

14 ответов

трубопровод к другому процессу (хотя это не будет выполнять то, что вы сказали, что пытаетесь сделать):

это отправит вывод command1 в качестве ввода command2

-exec на find (этот будет делать то, что вы хотите сделать, но относящиеся к find )

(между find и -exec являются предикатами find, которые вы уже использовали. <> заменить конкретный файл, который вы нашли в команде ( cat <> в этом случае); the \; конец .)

отправить вывод одного процесса в качестве аргументов командной строки другому процессу

(обратите внимание, что это не обычные кавычки (под Тильдой

на моей клавиатуре).) Это отправит вывод command1 на command2 как аргументы командной строки. Обратите внимание, что имена файлов, содержащие однако пробелы (новые строки и т. д.) будут разбиты на отдельные аргументы.

если вы на Linux или есть GNU find и xargs , а затем использовать -print0 С find и -0 С xargs для обработки имен файлов, содержащих пробелы и другие символы нечетного шара.

Если вам не нужны имена файлов — только текст — добавьте соответствующую опцию в grep (обычно -h справочник ‘заголовки’). Чтобы абсолютно гарантировать, что имя файла печатается grep (даже если найден только один файл или последний вызов grep дается только 1 имя файла), затем добавить /dev/null до xargs командная строка, так что всегда будет по крайней мере два имени файла.

обратите внимание, что POSIX 2008 добавил + маркер find что означает, что теперь он автоматически группирует столько файлов, сколько разумно в одно выполнение команды, очень похоже на xargs делает, но с рядом преимуществ:

  1. вам не нужно беспокоиться о нечетных символах в файле имена.
  2. вам не нужно беспокоиться о том, что команда вызывается с нулевыми именами файлов.

оба эти проблемы с xargs без . Следовательно, вы могли бы разумно написать:

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

самое простое — использовать backticks ( ` ):

это принимает выход find и эффективно помещает его в командную строку cat . Это не работает хорошо, если find слишком много выходных (больше, чем может поместиться в командной строке) или если выходные данные имеют специальные символы (например, пробелы).

в некоторых оболочках, в том числе bash можно использовать $() вместо backticks:

это менее портативный, но nestable. Помимо этого, у него есть почти те же предостережения, что и backticks.

потому что выполнение других команд на том, что было найдено, является общим использованием для find , имеет -exec действие, которое выполняет команду для каждого файла находит:

на <> является заполнителем для имени файла и \; отмечает конец команды (после -exec .)

это будет работать cat один раз для каждого отдельного файла, а не для запуска одного экземпляра cat передача нескольких имен файлов, которые могут быть неэффективными и не могут иметь поведение, которое вы хотите для некоторых команд (хотя это нормально для cat ). Синтаксис также неудобен для ввода — you нужно избежать точки с запятой, потому что точка с запятой является особенной для оболочки!

Читайте также:  Usb webcam drivers windows

некоторые версии find (особенно версия GNU) позвольте вам заменить ; С + использовать -exec режим добавления для запуска меньшего количества экземпляров cat :

это передаст несколько имен файлов для каждого вызова cat , который может быть более эффективным.

обратите внимание, что это не гарантированно использовать один вызов, однако. Если командная строка будет слишком длинной, аргументы будут распределены по нескольким вызовам cat . Для cat это, вероятно, не имеет большого значения, но для некоторых других команд это может изменить поведение нежелательным образом. В системах Linux ограничение длины командной строки довольно велико, поэтому разделение на несколько вызовов довольно редко по сравнению с некоторыми другими ОС.

классический / портативный подход использовать xargs :

xargs запускает указанную команду ( cat в данном случае), и добавляет аргументы, основанные на том, что он читает из stdin. Прямо как -exec С + , это при необходимости разрушит командную строку. То есть, если find производит слишком много вывода, он будет работать cat несколько раз. Как упоминалось в разделе о -exec ранее, есть некоторые команды, где это разделение может привести к различному поведению. Обратите внимание, что с помощью xargs как это проблемы с пробелами в именах файлов, как xargs просто использует пробелы в качестве разделителя.

самый надежный, портативный и эффективный метод также использует xargs :

на -print0 флаг говорит find использовать (нулевой символ) разделители между именами и -0 флаг говорит xargs ожидать, что эти разделители. Это имеет почти идентичное поведение с -exec . + подход, хотя более портативный (но к сожалению более подробного).

чтобы достичь этого (используя bash) , я бы сделал следующее:

Это известно как» подстановка команд», и по умолчанию он удаляет ленту, что действительно удобно !

более подробная информация здесь

звучит как задание для сценария оболочки для меня:

или что-то в этом роде

вот мой способ найти имена файлов, которые содержат некоторый контент, который меня интересует, только одна строка bash, которая хорошо обрабатывает пробелы в именах файлов:

Я использую что-то вроде этого:

» -print0 » аргумент «найти» и » -0 «аргумент для» xargs » необходим для правильной обработки пробелов в путях/именах файлов.

команда find имеет аргумент-exec, который вы можете использовать для таких вещей, вы можете просто сделать grep напрямую, используя это.

Источник

Команда cat Linux

Команда cat — это одна из самых часто используемых команд Linux. Она часто применяется опытными пользователями во время работы с терминалом. С помощью этой команды можно очень просто посмотреть содержимое небольшого файла, склеить несколько файлов и многое другое.

Несмотря на то что утилита очень проста и решает только одну задачу в лучшем стиле Unix, она будет очень полезной. А знать о ее дополнительных возможностях вам точно не помешает. В этой статье будет рассмотрена команда cat linux, ее синтаксис, опции и возможности.

Команда cat

Название команды — это сокращения от слова catenate. По сути, задача команды cat очень проста — она читает данные из файла или стандартного ввода и выводит их на экран. Это все, чем занимается утилита. Но с помощью ее опций и операторов перенаправления вывода можно сделать очень многое. Сначала рассмотрим синтаксис утилиты:

$ cat опции файл1 файл2 .

Вы можете передать утилите несколько файлов и тогда их содержимое будет выведено поочередно, без разделителей. Опции позволяют очень сильно видоизменить вывод и сделать именно то, что вам нужно. Рассмотрим основные опции:

  • -b — нумеровать только непустые строки;
  • -E — показывать символ $ в конце каждой строки;
  • -n — нумеровать все строки;
  • -s — удалять пустые повторяющиеся строки;
  • -T — отображать табуляции в виде ^I;
  • -h — отобразить справку;
  • -v — версия утилиты.
Читайте также:  Dns domain name in linux

Это было все описание linux cat, которое вам следует знать, далее рассмотрим примеры cat linux.

Использование cat в Linux

Самое простое и очевидное действие, где используется команда cat linux — это просмотр содержимого файла, например:

Команда просто выведет все, что есть в файле. Чтобы вывести несколько файлов достаточно просто передать их в параметрах:

Как вы знаете, в большинстве команд Linux стандартный поток ввода можно обозначить с помощью символа «-«. Поэтому мы можем комбинировать вывод текста из файла, а также стандартного ввода:

cat file — file1

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

Также вы можете нумеровать все строки в файле:

Опция -s позволяет удалить повторяющиеся пустые строки:

А с помощью -E можно сообщить утилите, что нужно отображать символ $ в конце каждой строки:

Если вы не передадите никакого файла в параметрах утилите, то она будет пытаться читать данные из стандартного ввода:

Для завершения записи нажмите Ctrl+D. Таким образом можно получить очень примитивный текстовый редактор — прочитаем ввод и перенаправим его вместо вывода на экран в файл:

cat > file2
$ cat file2

Возможность объединения нескольких файлов не была бы настолько полезна, если бы нельзя было записать все в один:

cat file1 file2 > file3
$ cat file3

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

Выводы

В этой статье мы рассмотрели что представляет из себя команда cat linux и как ею пользоваться. Надеюсь, эта информация была полезной для вас. Если у вас остались вопросы, спрашивайте в комментариях!

Источник

Команда find в Linux

Очень важно уметь вовремя и очень быстро найти нужную информацию в системе. Конечно, все современные файловые менеджеры предлагают отличные функции поиска, но им не сравнится с поиском в терминале Linux. Он намного эффективнее и гибче обычного поиска, вы можете искать файлы не только по имени, но и по дате добавления, содержимому, а также использовать для поиска регулярные выражения. Кроме того, с найденными файлами можно сразу же выполнять необходимые действия.

В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем ее синтаксис, опции и рассмотрим несколько примеров.

Основная информация о Find

Find — это одна из наиболее важных и часто используемых утилит системы Linux. Это команда для поиска файлов и каталогов на основе специальных условий. Ее можно использовать в различных обстоятельствах, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим подобным критериям.

Утилита find предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.

Команда find имеет такой синтаксис:

find [ папка] [ параметры] критерий шаблон [действие]

Папка — каталог в котором будем искать

Параметры — дополнительные параметры, например, глубина поиска, и т д

Критерий — по какому критерию будем искать: имя, дата создания, права, владелец и т д.

Шаблон — непосредственно значение по которому будем отбирать файлы.

Основные параметры команды find

Я не буду перечислять здесь все параметры, рассмотрим только самые полезные.

  • -P никогда не открывать символические ссылки
  • -L — получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
  • -maxdepth — максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
  • -depth — искать сначала в текущем каталоге, а потом в подкаталогах
  • -mount искать файлы только в этой файловой системе.
  • -version — показать версию утилиты find
  • -print — выводить полные имена файлов
  • -type f — искать только файлы
  • -type d — поиск папки в Linux
Читайте также:  Как создать ярлык rdp windows 10

Критерии

Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные.

  • -name — поиск файлов по имени
  • -perm — поиск файлов в Linux по режиму доступа
  • -user — поиск файлов по владельцу
  • -group — поиск по группе
  • -mtime — поиск по времени модификации файла
  • -atime — поиск файлов по дате последнего чтения
  • -nogroup — поиск файлов, не принадлежащих ни одной группе
  • -nouser — поиск файлов без владельцев
  • -newer — найти файлы новее чем указанный
  • -size — поиск файлов в Linux по их размеру

Примеры использования

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

1. Поиск всех файлов

Показать все файлы в текущей директории:

2. Поиск файлов в определенной папке

Показать все файлы в указанной директории:

Искать файлы по имени в текущей папке:

Не учитывать регистр при поиске по имени:

find . -iname «test*»

3. Ограничение глубины поиска

Поиска файлов по имени в Linux только в этой папке:

find . -maxdepth 1 -name «*.php»

4. Инвертирование шаблона

Найти файлы, которые не соответствуют шаблону:

find . -not -name «test*»

5. Несколько критериев

Поиск командой find в Linux по нескольким критериям, с оператором исключения:

find . -name «test» -not -name «*.php»

Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:

find -name «*.html» -o -name «*.php»

6. Несколько каталогов

Искать в двух каталогах одновременно:

find ./test ./test2 -type f -name «*.c»

7. Поиск скрытых файлов

Найти скрытые файлы:

8. Поиск по разрешениям

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

find . type f -perm 0664

Найти файлы с установленным флагом suid/guid:

find / -perm 2644

find / -maxdepth 2 -perm /u=s

Поиск файлов только для чтения:

find /etc -maxdepth 1 -perm /u=r

Найти только исполняемые файлы:

find /bin -maxdepth 2 -perm /a=x

9. Поиск файлов в группах и пользователях

Найти все файлы, принадлежащие пользователю:

find . -user sergiy

Поиск файлов в Linux принадлежащих группе:

find /var/www -group developer

10. Поиск по дате модификации

Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:

Поиск файлов в Linux открытых N дней назад:

Найти все файлы, модифицированные между 50 и 100 дней назад:

find / -mtime +50 –mtime -100

Найти файлы измененные в течении часа:

11. Поиск файлов по размеру

Найти все файлы размером 50 мегабайт:

От пятидесяти до ста мегабайт:

find / -size +50M -size -100M

Найти самые маленькие файлы:

find . -type f -exec ls -s <> \; | sort -n -r | head -5

find . -type f -exec ls -s <> \; | sort -n | head -5

12. Поиск пустых файлов и папок

find /tmp -type f -empty

13. Действия с найденными файлами

Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, выполнить ls для получения подробной информации о каждом файле:

find . -exec ls -ld <> \;

Удалить все текстовые файлы в tmp

find /tmp -type f -name «*.txt» -exec rm -f <> \;

Удалить все файлы больше 100 мегабайт:

find /home/bob/dir -type f -name *.log -size +100M -exec rm -f <> \;

Выводы

Вот и подошла к концу эта небольшая статья, в которой была рассмотрена команда find. Как видите, это одна из наиболее важных команд терминала Linux, позволяющая очень легко получить список нужных файлов. Ее желательно знать всем системным администраторам. Если вам нужно искать именно по содержимому файлов, то лучше использовать команду grep.

Источник

Оцените статью