Как использовать результат поиска как часть регулярного выражения в оболочке Bash - PullRequest
0 голосов
/ 24 сентября 2019

Я хочу выяснить, в каком каталоге нет файла * .dsc, поэтому я попробовал:

find . -type d -exec ls {}/*.dsc

вывод такой, как показано ниже:

ls: connot access './abc/*.dsc': No such file or directory

Я уверен, что в каталоге abc / есть файл dsc.Кажется, оболочка bash будет обрабатывать "{} / *. Dsc" как строку, но не как регулярное выражение, поэтому я попробовал еще раз:

find . -type d|xargs -I {} ls {}/*.dsc

, но результат тот же.Как я могу заставить команду работать так, как мне нужно?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Можете ли вы попробовать это:

find . ! -iname "*.dsc" -type d

!: используется для отмены матча.Он будет перечислять все, кроме файлов с расширением .dsc.

-type d: при этом будут выбраны все каталоги.

0 голосов
/ 24 сентября 2019

Я не смог использовать подстановочные знаки в find + ls, но команда ниже работает.

find . -type d -not -path . | while read -r dir; do [ -f $dir/*\.dsc ] || echo $dir; done

Он отдельно проверяет, существует ли файл * .dsc и в противном случае выводит каталог.

...