如何使用bash检索目录中的文件夹名称

Fil*_*mos 0 bash directory filenames

我正在尝试获取另一个文件夹中文件夹的名称。我试图使用波纹管代码,但问题是它返回文件夹的完整地址,而不仅仅是文件夹名称

for folder in /[my folder]/*; do cat $folder;  done
Run Code Online (Sandbox Code Playgroud)

有了这个,我得到了/[my folder]/subfolder1,我所期望的只是subfolder1.

谢谢

ter*_*don 6

cat是一个简单地获取其输入流或文件并将其打印到标准输出的程序。你不能cat目录,那没有意义。如果您只想查看给定目录的所有一级子目录的名称,您可以使用echowhich 简单地打印您提供的内容:

$ for dir in foo/*/; do echo "$dir"; done
foo/dir1/
foo/dir2/
foo/dir3/
foo/dir4/
Run Code Online (Sandbox Code Playgroud)

你甚至不需要循环:

$ echo foo/*/
foo/dir1/ foo/dir2/ foo/dir3/ foo/dir4 
Run Code Online (Sandbox Code Playgroud)

只获取目录名称,不获取路径:

$ for dir in foo/*/; do basename "$dir"; done
dir1
dir2
dir3
dir4
Run Code Online (Sandbox Code Playgroud)

或者,您可以cd到路径:

$ cd foo
$ echo */
dir1/ dir2/ dir3/ dir4/
Run Code Online (Sandbox Code Playgroud)

或者cd在子shell中,以便在命令完成时保持原来的位置:

$ ( cd foo && echo */ )
dir1/ dir2/ dir3/ dir4/
Run Code Online (Sandbox Code Playgroud)

或者,将它们放在单独的行上,并确保即使在奇怪的目录名称(例如包含换行符的名称)上也能正常工作:

    $ ( cd foo && printf -- '%s\n' */ ) 
    dir1/
    dir2/
    dir3/
    dir4/
    
Run Code Online (Sandbox Code Playgroud)

最后,如果您的目录名称可以包含换行符或其他奇怪的内容,请使用: