日期:2014-05-16  浏览次数:20668 次

Shell脚本列出子目录文件路径
在该脚本中,我使用 ls -R 命令列出所有子目录和文件。然后针对目录,我使用 $file_dir 记录其路径,而针对文件,我将目录路径$file_dir与文件名$file_name拼接起来,然后显示文件的路径。
问题是 else 分支中$file_dir始终为空,并不是先前记录的值,请问这是怎么回事?是变量的作用域方面的问题吗?
新手请教,感谢回复。
Perl code
#! /bin/bash

ls -R | 
while read file_name
do
    #echo $file_name
    echo $file_name | 
    if grep "^\." > /dev/null
    then
        file_dir=`echo $file_name | sed 's\:$\/\'`
        #echo $file_dir
    else
        #echo $file_dir
        file_path=$file_dir$file_name
        #echo $file_path
        if [ -f "$file_path" ]
        then
            echo $file_path
        fi
    fi
done


------解决方案--------------------
用管道了,在子shell里执行,而在子shell中对变量的修改不会反应到当前shell中,所以file_dir为空
------解决方案--------------------
对于目录,ls -R 会在目录后面显示一个冒号吧,你拼接的时候要把这个冒号换成/


话说,为什么不直接使用find . 实现你的功能要求?