循环遍历目录中的文件

时间:2014-11-17 23:59:06

标签: linux bash file shell types

我想循环遍历目录的给定路径中的所有文件并回显每个文件的类型。

到目前为止,我设法做到了这些:

for file in `ls $path`
do
    if [[ -f "$file" ]];
    then
        echo "file"
    fi

    if [[ -d "$file" ]];
    then
        echo "DIR"
    fi 
done

但是我没有得到任何东西我在路径中有两个目录吗?

3 个答案:

答案 0 :(得分:1)

避免解析ls输出,更好的解决方案是(使用glob):

path=/tmp/foobar
cd "$path"
for file in *
do

    if [[ -f "$file" ]]
    then
        echo "FILE $file"
    fi

    if [[ -d "$file" ]]
    then
        echo "DIR $file"
    fi 
done

答案 1 :(得分:0)

ls不会显示$path本身。您可以手动添加它:

for file in `ls -- "$path"/`
do
    file="$path/file"  # New code line.
    if [[ -f "$file" ]]
    then
        echo "file"
    fi
    if [[ -d "$file" ]]
    then
        echo "DIR"
    fi 
done

但是,请考虑Etan Reisner的评论,并删除ls,因为在您的使用案例中它很可能是不必要的。

答案 2 :(得分:0)

也许你想要这个:

find  your/path  -maxdepth 1  -type f -exec file {} \;

如果您需要递归挖掘子文件夹,只需删除-maxdepth 1选项,如下所示:

find  your/path  -type f -exec file {} \;

如果您还需要打印文件夹名称及其类型(当然是type ==“Directory”),只需删除-type f选项,如下所示:

find  your/path  -exec file {} \;