在shell脚本中使用for循环遍历目录结构

时间:2013-02-26 04:35:50

标签: bash shell unix

我希望使用条件for / while循环遍历目录

场景:路径为/home/ABCD/apple/ball/car/divider.txt

说我总是从/ home开始我的程序 我需要从家里迭代 - > ABCD - > apple - >球 - >汽车 - > divider.txt

每次迭代时,检查获取的路径是目录还是文件,如果文件退出循环并返回路径 如果返回的路径是目录,则再循环一次并继续..

更新了问题

FILES="home"
for f in $FILES
do

    echo "Processing $f"  >> "I get ABCD as output
        if[-d $f]
  --> returns true, in my next loop, I should get the output as /home/ABCD/apple..
        else 
          Break;
        fi

done

退出for循环后,我应该将/ home / ABCD / apple / ball / car /作为输出

3 个答案:

答案 0 :(得分:2)

除了多用途find之外,您可能还需要查看tree。它将以树状格式列出目录的内容

$ tree -F /home/ABCD/
/home/ABCD/
`-- apple/
    `-- ball/
        `-- car/
            `-- divider.txt

3 directories, 1 file

答案 1 :(得分:1)

这是我实施它的方式

for names in $(find /tmp/files/ -type f); 
do
    echo " ${directoryName} -- Directory Name found after find command : names" 

    <== Do your Processing here  ==>

done

名称将使每个文件具有完整的文件夹级别

/ tmp / files是我在其中找到文件的文件夹

答案 2 :(得分:0)

find /home -type d

将为您提供/ home下的所有目录,而不是其他内容。将/ home替换为您选择的目录,您将获得该级别下的目录。

如果您的心脏一个接一个地检查每个文件,那么您正在寻找的if..then测试条件是:

if [ -f $FILE ]
then
echo "this is a regular file"
else 
echo "this is not a regular file, but it might be a special file, a pipe etc."
fi

-OR -

if [ -d $FILE ]
then
echo "this is a directory. Your search should go further"
else 
echo "this is a file and buck stops here"
fi