我目前正在尝试将目录作为参数,然后列出目录的内容。如果另一个目录在该目录中,则以递归方式执行相同操作。
当前代码:
#! /bin/bash
function gothrudir {
for f in $1
do
if [ -n "$( file $f|grep "directory" )" ] ;
then
gothrudir $f
else
ls $f
fi
done
]
gothrudir $1
gothrudir `pwd`
我不确定如何传递目录中的所有文件以进行循环。目前它只是一个无限循环,因为它只检查给定的目录,看到它的目录,然后回忆起自己。
感谢您的帮助!
答案 0 :(得分:2)
正如其他人所指出的那样,find
是一种更好的方法。但只是为了完整性,这里是如何修复递归bash函数。我改变了三件事(加上一些次要的格式更改):使用"$1"/*
获取$ 1中的文件列表,双引所有路径(它们有时包含空格),并使用[ -d ... ]
而不是调用file
以查看某些内容是否为目录。
function gothrudir {
for f in "$1"/*; do
if [ -d "$f" ]; then
gothrudir "$f"
else
ls "$f"
fi
done
}
gothrudir "$1"
答案 1 :(得分:1)
function fnd {
find $1 -type d -exec ls -d {} \;
}
答案 2 :(得分:0)
你有没有理由这样做而不是使用find?
例如:find -ls
答案 3 :(得分:0)
'找到。 -type d'做到了这个