Я хочу получить названия каталогов, содержащих конкретные файлы, но исключить название родительского каталога.
Например:
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
. Как я могу сделать это?
С 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.
Самый простой подход, вероятно, использует %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