我想循环遍历目录的给定路径中的所有文件并回显每个文件的类型。
到目前为止,我设法做到了这些:
for file in `ls $path`
do
if [[ -f "$file" ]];
then
echo "file"
fi
if [[ -d "$file" ]];
then
echo "DIR"
fi
done
但是我没有得到任何东西我在路径中有两个目录吗?
答案 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 {} \;