我正在尝试获取另一个文件夹内的文件夹的名称。我试图使用下面的代码,但问题是它返回文件夹的完整地址,而不仅仅是文件夹名称
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/
最后,如果您的目录名称可能包含换行符或其他奇怪的内容,请使用: