получение каталога файлов, исключая родительское имя папки

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

Например:

find ./app -name '*.component.html';

Когда я использую эту команду, она возвращает результаты, показанные ниже:

./app/register/register.component.html
./app/_directives/alert.component.html
./app/app.component.html
./app/home/home.component.html
./app/login/login.component.html

Но я хочу получить результаты без ./app. Это может быть сделано путем ввода app каталог, как это:

cd app; find -name '*.component.html';

./register/register.component.html
./_directives/alert.component.html
./app.component.html
./home/home.component.html
./login/login.component.html

Но я хочу сделать это с единственной командой без ввода app. Как я могу сделать это?

2
задан 21 December 2016 в 14:36

2 ответа

С GNU find можно использовать

find ./app -name '*.component.html' -printf '%P\n'

От -printf раздел man find:

    %P     File's name with the name  of  the  starting-point  under
           which it was found removed.
3
ответ дан 2 December 2019 в 02:48

Самый простой подход, вероятно, использует %P в качестве @steeldriver предложенный. С другой стороны, Вы могли проанализировать вывод для удаления имени:

$ find ./app -name '*.component.html' | sed 's#\./app/#./#'
./app.component.html
./home/home.component.html
./_directives/alert.component.html
./login/login.component.html
./register/register.component.html

Или, Вы могли выполнить все это в подоболочке и CD в ./app в подоболочке, таким образом, Ваш фактический рабочий каталог остается неизменным:

$ pwd 
/home/terdon
$ ( cd app; find -name '*.component.html')
./app.component.html
./home/home.component.html
./_directives/alert.component.html
./login/login.component.html
./register/register.component.html
$ pwd
/home/terdon

Наконец, Вы могли также использовать оболочку вместо find () предположение, что Вы используете удар):

$ shopt -s globstar
$ printf '%s\n' ./app/**/*component.html |  sed 's#\./app/#./#'
./app.component.html
./_directives/alert.component.html
./home/home.component.html
./login/login.component.html
./register/register.component.html

Или

$ shopt -s globstar
$ for f in ./app/**/*component.html ; do echo "${f%./app}"; done
./app/app.component.html
./app/_directives/alert.component.html
./app/home/home.component.html
./app/login/login.component.html
./app/register/register.component.html
0
ответ дан 2 December 2019 в 02:48

Другие вопросы по тегам:

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