Linux 如何在目录的文件夹上循环?

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

假设我在目录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
/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
或任何其他相关程序。这只是实现同样目标的一种方法。