Linux bash“不带”计数文件;查找“;
我试图编写一个bash程序来计算目录中文件、目录、链接的数量,我试图比较赋予文件的权限的第一个字符,这意味着我将对每个文件应用ls-l命令,然后比较第一个字母,对于一个文件,我得到-rwxrwxr-x,这意味着它是一个文件,因为它开始于-和drwxrwxr-x意味着它是一个目录,因为它开始于一个“d”,我写了这段代码,但它不能正常工作,我不知道为什么,谢谢Linux bash“不带”计数文件;查找“;,linux,bash,shell,switch-statement,Linux,Bash,Shell,Switch Statement,我试图编写一个bash程序来计算目录中文件、目录、链接的数量,我试图比较赋予文件的权限的第一个字符,这意味着我将对每个文件应用ls-l命令,然后比较第一个字母,对于一个文件,我得到-rwxrwxr-x,这意味着它是一个文件,因为它开始于-和drwxrwxr-x意味着它是一个目录,因为它开始于一个“d”,我写了这段代码,但它不能正常工作,我不知道为什么,谢谢 #!/bin/bash IFS=$'\n' for f in `ls -l $1 | tail -n +2 ` do fic=0 rep=
#!/bin/bash
IFS=$'\n'
for f in `ls -l $1 | tail -n +2 `
do
fic=0
rep=0
lie=0
autre=0
t=${f:0:1}
case "$t" in
("-")
fic=$((fic+1))
;;
("d")
rep=$((rep+1))
;;
("l")
lie=$((lie+1))
;;
(*)
autre=$((autre+1))
;;
esac
total=$((total+1))
done
command=$(pwd)
echo "Statistique de "$command
echo "Fichier(s) :" $fic
echo "Repertoire(s) :" $rep
echo "Lien(s) symbolique(s) :" $lie
echo "Autre :" $autre
echo "Total :" $total
除了要将变量初始化移到循环之外,还应使用test
命令查看给定文件是符号链接、目录、普通文件还是其他文件
#!/usr/bin/env bash
fic=0
rep=0
lie=0
autre=0
for f in $1/*
do
if [ -h "$f" ]
then
lie=$((++lie))
elif [ -d "$f" ]
then
rep=$((++rep))
elif [ -f "$f" ]
then
fic=$((++fic))
else
autre=$((++autre))
fi
total=$((++total))
done
command=$(pwd)
echo "Statistique de "$command
echo "Fichier(s) :" $fic
echo "Repertoire(s) :" $rep
echo "Lien(s) symbolique(s) :" $lie
echo "Autre :" $autre
echo "Total :" $total
如果您的bash配备了gnuls,那么还有一种不同的方法,不需要所有这些If。Bellow在我的bash中使用ls GNU版本8.25可以正常工作
echo "Statistique de "$PWD
echo "Fichier(s) :" $(ls -l |egrep '^-' |wc -l)
echo "Repertoire(s) :" $(ls -l |egrep '^d' |wc -l)
echo "Lien(s) symbolique(s) :" $(ls -l |egrep '^l' |wc -l)
echo "Autre :" $(ls -l |grep -v -e '^l' -e '^d' -e '^-' |wc -l)
echo "Total :" $(ls -l |wc -l)
看,你最好说明一个很好的理由,为什么你不想使用find,这是为这个量身定做的?你应该考虑把初始化从循环中移开。谢谢威廉,现在没问题,Inian,只是因为这是我问的,这是一个家庭作业。