我想获取包含特定文件的目录名称,但不包括父目录名称。
例如:
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
。我该怎么做呢?
答案1
使用 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.
答案2
最简单的方法可能是使用%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
或者,你可以在子 shell 中运行整个程序,然后./app
在子 shell 中 cd 进入,这样你的实际工作目录保持不变:
$ 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
最后,您还可以使用 shell 而不是find
(假设您使用 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
或者
$ 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