Рекурсивный поиск каталогов по имени файла, остановка нисходящего, если найдено

Вам нужно разделить свои аргументы так же, как это сделала бы оболочка:

#include <unistd.h>
int main() {
    char *args[10];
    int i = 0;
    args[i++] = "/usr/sbin/iptables";
    args[i++] = "-I";
    args[i++] = "INPUT";
    args[i++] = "-p";
    args[i++] = "tcp";
    args[i++] = "--dport";
    args[i++] = "80";
    args[i++] = "-j";
    args[i++] = "ACCEPT";
    args[i++] = NULL;
    execve(args[0], args, NULL);
}

Оболочка разбивается на все пространства.

0
03.02.2020, 20:08
1 ответ
find. -type d -exec sh -c '
   f="$1"/file
   [ -e "$f" ] && { printf "%s\n" "$f"; true; }
' find-sh {} \; -prune

Вместо поиска файлов я нахожу каталоги и проверяю наличие fileв каждом каталоге. Если fileсуществует, путь к нему печатается и -pruneактивируется для каталога.

Примечания:

  • trueдолжен убедиться, что -pruneвыполняет свою работу, даже если printfне работает по какой-либо причине.

  • В этом решении findникогда не обрабатывает никакие file, он обрабатывает каталоги. Если вы хотите что-то сделать с file, вы можете сделать это из внутренней оболочки, используя $f.

    Пример :Если бы я использовал … -prune -print, инструмент напечатал бы соответствующий путь к каталогу, а не файл. Чтобы напечатать путь к file, я использовал printfиз внутренней оболочки.

2
28.04.2021, 23:24

Теги

Похожие вопросы