如何使用ls命令获取目录中的所有文件和文件的列表

时间:2015-12-30 17:35:36

标签: shell

我正在尝试获取目录和子目录中所有文件的列表,但不使用find或递归执行。

我需要找到一种方法,使用lsgrepsed

我似乎无法找到不仅仅使用find的解决方案。

编辑:

我试图基本上找到一种方法来计算一个目录中的所有文件和目录。我不能使用递归函数,但我可以使用迭代语句,例如for循环和if语句。

我找到了一种使用for循环执行此操作的方法,但这只在子目录中搜索,而不是在这些子目录中的文件夹中搜索。换句话说,深度只有2.我需要它来搜索。我再次无法使用find命令。

希望这有助于消除任何问题。

这是我到目前为止所做的:

a=0
b=0
for i in $( ls ); do
    if [ -d "$i" ] ; then
        c=$(pwd)
        cd $i
        a=$(($a + $(ls -l | grep -e "^-" | wc -l)))
        b=$(($b + $(ls -l | grep -e "^d" | wc -l)))
        cd $c
    fi
done
echo "Number of files: $a"
echo "Number of directories: $b"

2 个答案:

答案 0 :(得分:1)

您可能希望避免显式递归。 ls就是为此构建的,并且内置了递归,使用:

ls -R

答案 1 :(得分:0)

迭代执行递归任务的最简单方法是使用某种堆栈(在本例中为数组):

DIR_COUNT=0
FILE_COUNT=0

# use an array as stack, initialized with the root dir 
STACK=(".")

# loop until the stack is empty
while [ ${#STACK[@]} -gt 0 ] ; do

    # get the next dir to process (first element of the array)
    DIR=${STACK[0]}

    # remove it from the stack (replace the stack with itself minus the first element)
    STACK=(${STACK[@]:1})

    for i in $(ls  $DIR); do
        if [ -d "$DIR/$i" ] ; then
            ((DIR_COUNT++))

            # add the directory to process it later
            STACK+=($DIR/$i)
        else
            ((FILE_COUNT++))
        fi
    done
done

echo Number of files: $FILE_COUNT
echo Number of directories: $DIR_COUNT

这可能仅适用于bash,我希望这没问题。