获取文件目录(不包括父文件夹名称)

获取文件目录(不包括父文件夹名称)

我想获取包含特定文件的目录名称,但不包括父目录名称。

例如:

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

相关内容