我正在寻找一个脚本,它使用导出和读取链接以及不使用ls选项递归列出所有文件。我尝试了以下代码,但它没有达到目的。请帮忙。
我的代码 -
#!/bin/bash
for i in `find . -print|cut -d"/" -f2`
do
if [ -d $i ]
then
echo "Hello"
else
cd $i
echo *
fi
done
答案 0 :(得分:2)
这是一个简单的递归函数,它执行目录列表:
list_dir() {
local i # do not use a global variable in our for loop
# ...note that 'local' is not POSIX sh, but even ash
# and dash support it.
[[ -n $1 ]] || set -- . # if no parameter is passed, default to '.'
for i in "$1"/*; do # look at directory contents
if [ -d "$i" ]; then # if our content is a directory...
list_dir "$i" # ...then recurse.
else # if our content is not a directory...
echo "Found a file: $i" # ...then list it.
fi
done
}
或者,如果通过" recurse",您只是意味着您希望列表是递归的,并且可以接受您的代码本身不进行任何递归:
#!/bin/bash
# ^-- we use non-POSIX features here, so shebang must not be #!/bin/sh
while IFS='' read -r -d '' filename; do
if [ -f "$filename" ]; then
echo "Found a file: $filename"
fi
done < <(find . -print0)
安全地执行此操作要求使用-print0
,以便名称由NUL分隔(文件名中不能存在的唯一字符;名称中的换行符有效。