Расширение Shell для аргументов?

[114738] Если вам нужен только один уровень, то есть трюк, чтобы сделать это без необходимости перечислять каталог. Если вы хотите рекурсию, то лучшее, что вы получите - это то, что у вас есть.

killall google*
Уловка с одним уровнем:

...и вычитание 2. В результате получаем количество каталогов в этом каталоге (не рекурсивных).

Эта команда показывает количество жестких ссылок в указанном файле. Всякий раз, когда вы создаете директорию внутри директории, подкаталог имеет жесткую связь с родительской директорией, [115172]...[115173]. Таким образом, создавая подкаталог, вы увеличиваете число жестких связей с родительской записной книжкой на единицу. Но мы вычитаем 2, потому что каждая директория начинается с 2 жестких связей. Одна жесткая ссылка находится в родительской директории и указывает на нее: запись [115174]dir[115175] внутри [115176]/путь/к[115177]. Другая жесткая связь - это каталог, содержащий ссылку на себя: запись [115178].[115179].

Однако при рекурсии вы должны изучить каждую директорию. Проблема в том, что нет способа сказать "дайте мне список только директорий внутри этой директории". Вы должны получить список каждой одиночной записи в директории, и затем [115180]stat[115181] каждый для того чтобы узнать, если это директория или файл.

Теперь когда вы ставите директорию, вы можете использовать вышеприведенную уловку hardlink для того чтобы найти, содержит ли та директория любые подкаталоги, и таким образом вы можете сохранить себя немного времени и не спуститься в ту директорию. Утилита [115182]find[115183] на самом деле использует этот трюк, чтобы получить небольшой прирост производительности в процессе.

Таким образом, в основном, использование [115184]find[115185] будет лучшим, что вы можете сделать, если вам нужна рекурсия.[114752].

1
01.04.2015, 12:09
3 ответа

xargs , кажется, что вы хотите:

echo install update doctor | xargs -n1 brew
5
27.01.2020, 23:13

Убегайте первого пространства и удалите другие пробелы:

$ printf "'%s'\n" brew\ {install,update,doctor}
'brew install'
'brew update'
'brew doctor'

Если Brew - это команда просто написать (также без пробелов):

brew {install,update,doctor}

Как с вашим примером MKDIR:

mkdir {install,update,doctor}

Вам нужно Нет внешнего процесса или трубопровода для этого; Все можно сделать в вашем bash оболочке.

1
27.01.2020, 23:13

Как насчет (обратите внимание на обратную косую черту, все важно):

echo brew\ {install,update,doctor}\;| bash

первый шаблон (аргументы для echo ) будет расширяться следующим образом:

echo brew install; brew update; brew doctor;

, который затем выводится эхом, производя следующий вывод:

brew install; brew update; brew doctor;

, который мы передаем новому экземпляру bash.

1
27.01.2020, 23:13

Теги

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