統計目錄下的文件數目及類型

1.這段shell可以實現查看當前目錄下有多少個文件夾,有多少個文件,其中可讀、可寫、可執行的分別是多少個。

#!/bin/bash
dir=`ls -l | grep ^d | wc -l`
file=`ls -l | grep ^- | wc -l`
filew=`ls -l | grep w | wc -l`
filer=`ls -l | grep r | wc -l`
filex1=`ls -lF | grep "\*" | wc -l`
filex2=`ls -l | grep ^- |awk 'substr($1,4,1)=="x" || substr($1,4,1)=="s"'|wc -l`
echo "There are $dir directoty in `pwd`."
echo "There are $file files in `pwd`."
echo "There are $filew files are writeabled."
echo "There are $filer files are readabled."
echo "There are $filex1 files can be excuted."
echo "There are $filex2 files can be excuted."
echo "$0"

其中查找當前目錄下的可執行文件的命令有兩個變量filex1和filex2。

用filex1時有缺陷,如果有文件名是 *結尾的,可能出現問題。(另外使用ls -F命令時,如果文件是目錄,在文件名後面放置一個 /,如果文件可執行,則放置一個 *,如果文件爲套接字,則放置一個 =,如果爲 FIFO,則放置一個 |符號,如果是符號鏈接,則放置一個 @,所以使用這條命令式,文件結尾有符號*。)

用下面這條命令沒有問題

ls -l | grep ^- | awk 'substr($1,4,1)=="x"||substr($1,4,1)=="s" {print $NF}'


我有一個疑問,用ls -l命令時顯示如下:
-rwxrwxr--. 1  478 Jan 26 12:30 count.sh

查找可讀、可寫文件時可以直接用grep w或者grep r,但用grep x查找可執行文件時,和ls -l的結果是一樣的,相當於grep x沒有起作用,不明白爲什麼這樣設計。

個人猜測:在Linux系統下,一個文件至少有兩部分,文件正文和文件的屬性(比如可讀、可寫)。文件在硬盤存儲時,還是以r、w的方式標識文件的可讀、可寫的屬性,而可執行屬性的標識不是x,是另外一種方式。也就是說,文件的屬性也是以字符串的形式存儲在硬盤中,當我們用grep w檢索可寫的文件時,和代表屬性的字符串進行對比,如果發現了w字符,就顯示相關文件;而存儲在中的每個文件中都有x這個字符,所以用grep x查找可執行文件時,和ls -l的結果一樣。

而且,這種查找可讀/可寫文件時有弊端,比如說當一個文件命名爲keduw,文件的權限爲可讀,不可寫,用grep w 查詢可寫文件時,這個文件也會顯示出來,因爲它的名字中包含w這個字符。

2.實現同樣的功能還有一種寫法,如下:

#!/bin/bash
f=0
d=0
x=0
for files in *
do
if [ -f "$files" ]
then
f=`expr $f + 1`
if [ -x "$files" ]
then
x=`expr $x + 1`
fi
fi
done
for directory in *
do
if [ -d "$directory" ]
then d=`expr $d + 1`
fi
done
echo "There are $d directorys in `pwd`."
echo "There are $f files in `pwd`,and $x of them can be excuted."
注意是否要添加空格,if [ -f "$files"  ]之間要加空格,賦值之間不能加空格,f=0.還有可寫的文件一定要有可讀的屬性,不然無法編輯。

要判斷是否可讀/可寫,只需要再添加兩個if語句即可。


發佈了33 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章