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

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

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

for folder in /[my folder]/*; do cat $folder;  done

有了这个我明白了/[my folder]/subfolder1,我所期望的正是subfolder1

谢谢

答案1

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

$ for dir in foo/*/; do echo "$dir"; done
foo/dir1/
foo/dir2/
foo/dir3/
foo/dir4/

你甚至不需要循环:

$ echo foo/*/
foo/dir1/ foo/dir2/ foo/dir3/ foo/dir4 

仅获取目录名称而不获取路径:

$ for dir in foo/*/; do basename "$dir"; done
dir1
dir2
dir3
dir4

或者,您可以cd访问以下路径:

$ cd foo
$ echo */
dir1/ dir2/ dir3/ dir4/

或者cd在子 shell 中,这样当命令完成时你停留在原来的位置:

$ ( cd foo && echo */ )
dir1/ dir2/ dir3/ dir4/

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

    $ ( cd foo && printf -- '%s\n' */ ) 
    dir1/
    dir2/
    dir3/
    dir4/
    

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

相关内容