Linux find exec multiple commands

Несколько команд в -exec у find

Можно ли у find в параметре -exec задать не одну команду а целый ряд команд.

Например — проверка диска:
find /mnt/cdrom -name ‘*’ -exec cp -v ‘<>‘ /dev/null ‘;’

выполняется команда
cp -v ‘<>‘ /dev/null
а хочется:
cp -v ‘<>‘ /dev/null; let SumErr=$SumErr+$?
чтобы в конце написать, об ошибках при чтении файлов

Re: Несколько команд в -exec у find

Несколько команд — не проблема (просто несколько exec’ов), а вот let — проблема, потому что это не команда. exec вызывает настоящие программы, а не builtin’ы шелла, о которых он ничего не знает.

Выставлять $? он тоже не станет, он возвращает её по-своему, а не просто отдаёт статус последней команды.

Анонимус, боюсь что ты вообще в принципе не понимаешь, как работает шелл. Это очень плохо.

Что касается твоей конкретной задаче. find /mnt/cdrom -type f -print0 |xargs -0 cat >/dev/null

А ошибки и так в stderr улетят, не сомневайся.

Re: Несколько команд в -exec у find

Re: Несколько команд в -exec у find

И чего ты добьёшься этим let? Того, что в каждом дочернем процесс переменная SumErr будет равна нулю или единице, а после окончания find мы этого всё равно не увидим?

Re: Несколько команд в -exec у find

Да я на команды и не смотрел 🙂
Прочитав вопрос, понял, что автор ищет решение как запустить в -exec сразу несколько команд.

Источник

10 find exec multiple commands examples in Linux/Unix

Table of Contents

In this article I will share multiple find exec examples. Find is a very helpful utility for every system admin for day to day tasks but you can also combine find exec multiple commands to filter and execute certain tasks. For example: find exec grep a pattern and print only patching files, use find exec with pipe, combine fix exec with sed or awk in Linux or Unix.

Find exec multiple commands syntax

The -exec flag to find causes find to execute the given command once per file matched, and it will place the name of the file wherever you put the <> placeholder. The command must end with a semicolon, which has to be escaped from the shell, either as \; or as » ; «.

Syntax to be used for find exec multiple commands:

Find exec example 1: Collect md5sum

In this find exec example find all files under /tmp and collect md5sum for each file

Here, -type f means look out for regular file

Similarly you can find exec multiple commands to collect sha512sum or sha256sum for all file with find command. In the same find exec example to store the output to a file

Читайте также:  Генератор сетевых пакетов для windows

Find exec example 2: Remove files older than certain time

In the below find exec example we will list files older than 5 days

To remove files older than 5 days

Here -mtime means file’s data was last modified n*24 hours ago

Find exec example 3: Rename files

We use mv command to rename files, we can use this with find and exec to rename multiple files

This command we use find exec to rename files where the found files are stored in <> and then the same are renamed with _renamed extension

Combine find exec multiple commands

We can combine find exec multiple commands in one line. find will continue to run one by one as long as the entire chain so far has evaluated to true. So each consecutive -exec command is executed only if the previous ones returned true (i.e. 0 exit status of the commands).

Combine find exec with grep in Linux or Unix

You can combine find exec grep if you wish to look for files with certain content so use find exec grep. For example below I need the list of files which has string » deepak » using find exec grep. But find exec grep print filename didn’t work here as we only get matched string

Combine find exec grep print filename

Now in the above command we get a list of output from files which contains deepak string. But it does not print filename. Here with find exec grep print filename using different methods: In the below example we will combine find exec print filename

Alternatively you can also use below commands to combine find exec grep print filename:

Combine find exec shell script function

We can combine find exec shell script function. In the below example I will combine find exec shell script function to rename a file if found

Follow pattern matching for more details

Combine find exec with pipe

We can combine find exec with pipe. You can also use multiple pipes with find exec grep multiple commands and string. In the below example I am going to combine find exec with pipe multiple times:

Combine grep and find exec with sed

You can combine find exec with sed or with awk, In the below example we combine grep and find exec with sed

  • we find all the files under /tmp/dir1
  • grep for deepak in all the files which were found under /tmp/dir1
  • print the output on STDOUT
  • Use sed and replace deepak with deep

Combine find exec grep with cut or awk

In the below example we will combine find exec grep with cut but in the same command you can combine find exec grep with awk

Lastly I hope the steps from the article to find exec multiple commands in Linux or Unix was helpful. So, let me know your suggestions and feedback using the comment section.

Related Searches: find exec multiple commands, find exec grep print filename, find exec example, find exec with pipe, find exec with sed. find exec shell script in Linux or Unix

Didn’t find what you were looking for? Perform a quick search across GoLinuxCloud

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

For any other feedbacks or questions you can either use the comments section or contact me form.

Thank You for your support!!

Источник

12.2. Более сложные команды

Команды для более опытных пользователей

Для каждого найденного файла, соответствующего заданному шаблону поиска, выполняет команду COMMAND. Командная строка должна завершаться последовательностью символов \; (здесь символ «;» экранирован обратным слэшем, чтобы информировать командную оболочку о том, что символ «;» должен быть передан команде find как обычный символ). Если COMMAND содержит <> , то find подставляет полное имя найденного файла вместо «<>» .

Читайте также:  Latest phone with windows

Не следует путать опцию -exec команды find с внутренней командой Bash — exec.

Пример 12-2. Badname, удаление файлов в текущем каталоге, имена которых содержат недопустимые символы и пробелы.

Пример 12-3. Удаление файла по его номеру inode

Дополнительные примеры по использованию команды find вы найдете в Пример 12-22, Пример 3-4 и Пример 10-9. В страницах справочного ркуоводства (man find) вы найдете более подробную информацию об этой достаточно сложной и мощной команде.

Команда передачи аргументов указанной команде. Она разбивает поток аргументов на отдельные составляющие и поочередно передает их заданной команде для обработки. Эта команда может рассматриваться как мощная замена обратным одиничным кавычкам. Зачастую, когда команды, заключенные в обратные одиночные кавычки, завершаются с ошибкой too many arguments (слишком много аргументов), использование xargs позволяет обойти это ограничение. Обычно, xargs считывает список аргументов со стандартного устройства ввода stdin или из канала (конвейера), но может считывать информацию и из файла.

Если команда не задана, то по-умолчанию выполняется echo. При передаче аргументов по конвейеру, xargs допускает наличие пробельных символов и символов перевода строки, которые затем автоматически отбрасываются.

ls | xargs -p -l gzip — упакует с помощью gzip все файлы в текущем каталоге, выводя запрос на подтверждение для каждого файла.

xargs имеет очень любопытный ключ -n NN, который ограничивает количество передаваемых аргументов за один «присест» числом NN.

ls | xargs -n 8 echo — выведет список файлов текущего каталога в 8 колонок.

Еще одна полезная опция — -0, в комбинации с find -print0 или grep -lZ позволяет обрабатывать аргументы, содержащие пробелы и кавычки.

find / -type f -print0 | xargs -0 grep -liwZ GUI | xargs -0 rm -f

grep -rliwZ GUI / | xargs -0 rm -f

Обе вышеприведенные команды удалят все файлы, содержащие в своем имени комбинацию символов «GUI» . (Спасибо S.C.)

Пример 12-4. Использование команды xargs для мониторинга системного журнала

Пример 12-5. copydir, копирование файлов из текущего каталога в другое место, с помощью xargs

Универсальный обработчик выражений: вычисляет заданное выражение (аргументы должны отделяться пробелами). Выражения могут быть арифметическими, логическими или строковыми.

expr 5 % 3

expr 5 \* 3

В арифметических выражениях, оператор умножения обязательно должен экранироваться обратным слэшем.

y=`expr $y + 1`

Операция инкремента переменной, то же самое, что и let y=y+1, или y=$(($y+1)). Пример подстановки арифметических выражений.

z=`expr substr $string $position $length`

Извлекает подстроку длиной $length символов, начиная с позиции $position.

Пример 12-6. Пример работы с expr

Вместо оператора match можно использовать оператор :. Например, команда b=`expr $a : 3*` является точным эквивалентом для b=`expr match $a 1*` в примере, рассмотренном выше.

Этот пример демонстрирует необходимость экранирования оператора группировки — \( . \) в регулярных выражениях, при поиске по шаблону командой expr.

Perl, sed и awk имеют в своем распоряжении более мощный аппарат анализа строк. Коротенький скрипт на sed или awk, внутри сценария (см. Section 33.2) — значительно более привлекательная альтернатива использованию expr при анализе строк.

Дополнительные примеры, по обработке строк, вы найдете в Section 9.2.

Источник

How To Use Find Exec Command In Linux Bash?

Linux find command provides a lot of features to search and filter files in file system. One of the most popular and useful feature of find command is exec option. exec option is used to to run commands with founded search results.

Run Command

We will with a simple example where we will just provide single command to run with results. We will use -exec . In this example we will just print founded file names to the terminal. We will search for files with txt extension and print their names.

Run Command

Run Multiple Commands

We generally run single command to accomplish tasks. But in some cases we need to run multiple commands about the search result. We will specify multiple -exec options and command. In this example we will write the file name and grep for address .

Run Multiple Commands

Remove Files

We can remove files by using -exec option with rm bash command. In this example we will also provide the recursive and force options for rm command. In this example we will delete all files with txt extension.

Change Ownership Of Files

We can change ownership of files with -exec command. We will use chown command too. In this example we will change the ownership to the user ismail which have txt extension.

Источник

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

В прошлой статье я писал о программе locate, удобной для быстрого поиска файлов в системе.

Альтернативой locate является программа find : GNU find обходит каждый файл из дерева директорий, подставляя его имя в заданное выражение и проводит вычисление значения выражения слева до получения результата (правая часть выражения ложна для операции логического «и», истинна для логического «или»), на основании которого find принимает решение о выполнении заданного действия и переходит к рассмотрению следующего имени файла.

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

Перед тем, как как привести полезные примеры использования программы find с параметром exec , рассмотрим немного теоретических положений.

Параметры программы find

Наиболее известными параметрами для поиска файлов при помощи программы find , являются:

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

-mtime n Файлы были изменены n*24 часов назад.

-uid n Системный числовой идентификатор пользователя-владельца файла должен быть равен n .

Действия

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

-exec команда; Выполнить команду; выполнение считается успешным в случае статуса выхода, равного нулю. Все символы, следующие за командой, считаются ее аргументами до того момента, как встречается символ «;» . Строка «<>» заменяется на имя рассматриваемого файла каждый раз, когда она встречается среди аргументов команды.

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

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

В старых системах Unix у вас не будет возможности использовать параметр -delete , поэтому альтернатив параметру -exec для удаления файлов в них не остается.

А теперь рассмотрим некоторые другие примеры использования программы find с параметром exec .

При помощи параметра -type f вы можете вести поиск только файлов и просто изменять права доступа к каждому из них при помощи chmod .

В этом примере я использовал параметр -user как альтернативу параметру -uid .

В этом примере я снова использовал параметр -type , но на этот раз с аргументом d для поиска директорий.

Заключение

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

Источник

Читайте также:  Whea uncorrectable error windows 10 что за ошибка
Оцените статью