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
.
谢谢
cat
是一个简单地获取其输入流或文件并将其打印到标准输出的程序。你不能cat
目录,那没有意义。如果您只想查看给定目录的所有一级子目录的名称,您可以使用echo
which 简单地打印您提供的内容:
$ 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)
最后,如果您的目录名称可以包含换行符或其他奇怪的内容,请使用: