1

我正在寻找使用条件 for / while 循环遍历目录

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

假设我总是从 /home 开始我的程序我需要从 home 迭代 --> ABCD --> apple --> ball --> car --> 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/ 作为输出

4

3 回答 3

2

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

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

3 directories, 1 file
于 2013-02-26T07:41:26.613 回答
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 是我在其中找到文件的文件夹

于 2013-02-28T10:11:56.087 回答
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

-或者-

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
于 2013-02-26T06:58:06.357 回答