我正在尝试获取目录和子目录中所有文件的列表,但不使用find
或递归执行。
我需要找到一种方法,使用ls
,grep
和sed
。
我似乎无法找到不仅仅使用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"
答案 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
,我希望这没问题。