Com o GNU find
, você pode usar
find ./app -name '*.component.html' -printf '%P\n'
Da seção -printf
de man find
:
%P File's name with the name of the starting-point under
which it was found removed.
Eu quero obter os nomes dos diretórios que contêm arquivos específicos, mas excluo o nome do diretório pai.
Por exemplo:
find ./app -name '*.component.html';
Quando eu uso este comando, ele retorna os resultados mostrados abaixo:
./app/register/register.component.html
./app/_directives/alert.component.html
./app/app.component.html
./app/home/home.component.html
./app/login/login.component.html
Mas quero obter os resultados sem ./app
. Isso pode ser feito inserindo o diretório app
, desta forma:
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
Mas quero fazer isso com um único comando, sem inserir app
. Como posso fazer isso?
Com o GNU find
, você pode usar
find ./app -name '*.component.html' -printf '%P\n'
Da seção -printf
de man find
:
%P File's name with the name of the starting-point under
which it was found removed.
A abordagem mais simples é provavelmente usar %P
como @steeldriver sugerido. Como alternativa, você pode analisar a saída para remover o nome:
$ 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
Ou, você pode executar tudo em um subshell e colocar cd em ./app
na subshell para que seu diretório de trabalho permaneça inalterado:
$ 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
Finalmente, você também pode usar o shell em vez de find
(), supondo que esteja usando o bash:
$ 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
Ou
$ 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