Linux 如何在目录的文件夹上循环?
假设我在目录a1中,a1中有另一个目录。如果不使用cd提交,我如何在a1中打印提交中的文件夹名称?我能做以下事情吗?我正在编写shell脚本 对于提交的*/中的目录;做 ...Linux 如何在目录的文件夹上循环?,linux,shell,Linux,Shell,假设我在目录a1中,a1中有另一个目录。如果不使用cd提交,我如何在a1中打印提交中的文件夹名称?我能做以下事情吗?我正在编写shell脚本 对于提交的*/中的目录;做 ... 使用bourne或Posix外壳完成,您可以执行以下操作: for dir in ./submission/* do if test -d $dir then ... fi done 假设这是您的文件夹结构: /a1/submissions/file1 /a1/submissions/file2
使用bourne或Posix外壳完成,您可以执行以下操作:
for dir in ./submission/*
do
if test -d $dir
then ...
fi
done
假设这是您的文件夹结构:
/a1/submissions/file1
/a1/submissions/file2
/a1/submissions/file3
您可以使用ls[OPTIONS][FILES]
命令获取文件和/或目录列表:
如果您为ls
提供了一个绝对路径(即从“根”级开始),则您可以列出该路径的内容,而不管您当前在哪里(前提是您拥有访问权限)
因此,要获得submissions子文件夹中所有文件的列表,您可以运行ls/a1/submissions
,它将输出如下内容:
file1
file2
file3
您还可以使用递归来实现这一点
#!/bin/sh
func () { # $1=directory
for file in "$1"/*; do
if [ -d "$file" ]; then
func "$file" # Enter another recursion if "$file" is a folder.
else
echo "$file" # Print filename
fi
done
}
cd a1
func '.'
# Or this for absolute paths
# func "$(realpath .)"
我是shell脚本,所以没有使用ls,对吗?所以它对bash不起作用?因为当我这样做并键入echo$dir时,我得到的只是./submission/*
bash
主要与bourne和Posix兼容,所以它应该可以工作。。。如果你真的有文件夹在提交中。是的,我有文件夹在提交中,但当我这样做时,它只是回显我在for循环中写的路径名,而不是文件名。@badcaptain:你在问题中要求在提交中打印文件夹名。在SergeBallesta给出的答案中,变量dir
包含这样一个文件夹名,因此您可以使用(例如)echo$dir
打印它,或者使用它执行任何您想执行的操作。使用find
会不会更简单?@user1934428-当然可以<代码>查找、ls
或任何其他相关程序。这只是实现同样目标的一种方法。