當前位置:首頁 » 編程軟體 » ls腳本

ls腳本

發布時間: 2023-05-20 11:18:41

linux腳本,需要ls只顯示前10個文件,怎麼實現

ls只顯示前10個文件命令語句:ls -l | head -n 10。

ls 指令是Linux下最常用的指令之一,將每個由 Directory 參數指定的目錄或者每個由 File 參數指定的名稱寫到標准輸出,以及所仔悄要求的和標志一起的其它信息。


(1)ls腳本擴展閱讀

當 ls 命令顯示目錄內容時,它不顯示名稱以 .(點)開頭的文件項,除非使用了 -a 或者 -A 標志。如念茄渣果命令由 root 用戶執行,它預設使用 -A 標志。

通過指定 -C 或 -x 標志以多列列出各項。當向 tty 輸出時,-C 標志是預設格式。如果文件或目錄名太長,ls 命令顯示單列輸出。

通過指定 -m 標志可以以逗號分隔系列列出項。

㈡ LINUX中ls -l是如何工作的如何去實現一個腳本

可以參考:
#include
<sys/types.h>
#include
<sys/stat.h>
#include
<unistd.h>
#include
<stdio.h>
#include
<string.h>
#include
<errno.h>
#include
<pwd.h>
#include
<grp.h>
#include
<time.h>
#include
<dirent.h>
int
do_ls(char
*dir,char
*filename,int
lflag)
{
int
n;
struct
stat
buf;
char
out[100];
struct
passwd
*pw;
struct
group
*gr;
struct
tm
*t;
if(lflag
==
0)
//如果不帶l參數,直接顯示文件/目錄名
{
printf("%s\t",filename);
return
0;
}
if(lstat(dir,&buf)<0)
{
fprintf(stderr,"stat
error:%s\n",strerror(errno));
return
-1;
}
switch(buf.st_mode
&
s_ifmt)
//獲取字元串的屬性:普通文件-、目錄d、字元設備c、塊設備b、管道文件p、連接文件l、套接字文件s
{
case
s_ifreg:
printf("-");
break;
case
s_ifdir:
printf("d");
break;
case
s_ifchr:
printf("c");
break;
case
s_ifblk:
printf("b");
break;
case
s_ififo:
printf("p");
break;
case
s_iflnk:
printf("l");
break;
case
s_ifsock:
printf("s");
break;
}
for(n=8;n>=0;n--)
//列印文件的讀寫屬性:讀r、寫w、執行x、無許可權-
{
if(buf.st_mode&(1<<n))
{
switch(n%3)
{
case
2:
printf("r");
break;
case
1:
printf("w");
break;
case
0:
printf("x");
break;
default:
break;
}
}
else
{
printf("-");
}
}
printf("
%d",buf.st_nlink);
//硬鏈接數,此鏈接非彼鏈接,指(包含)目錄的個數,文件為1,目錄起始為2,再加上目錄里包含的目錄個數(不遞歸,只一層)
pw
=
getpwuid(buf.st_uid);
//所屬用戶名
printf("
%s",pw->pw_name);
gr
=
getgrgid(buf.st_gid);
//所屬組名
printf("
%s",gr->gr_name);
printf("
%ld",buf.st_size);
//位元組計總大小
t
=
localtime(&buf.st_atime);
//最後一次訪問時間
printf("
%d-%d-%d
%d:%d"
,t->tm_year+1900
,t->tm_mon+1
,t->tm_mday
,t->tm_hour
,t->tm_min);

printf("
%s
",filename);

if(s_islnk(buf.st_mode))
//判斷是否為鏈接,是返回真
{
printf("
->
");
if(readlink(filename,out,100)==-1)
{
//printf("readlink
error\n");
}
printf("%s",out);
}
printf("\n");
return
0;
}
int
ls_prepare(char
*w,int
aflag,int
lflag)
//ls的准備工作
{
struct
stat
buf;
//man
lstat可以看到此結構
char
name[100];
dir
*dir;
//類似打開文件的fd描述符
struct
dirent
*pdr;
//man
readdir可以看到此結構
if(lstat(w,&buf)<0)
//獲取文件/目錄屬性並賦值給buf,該函數和lstat一樣,只是當w為鏈接時,指代他本身,並不存在文件
{
fprintf(stderr,"stat
error:%s\n",strerror(errno));
return
-1;
}
if(s_isdir(buf.st_mode))
//判斷是否為目錄,是返回真
{
dir
=
opendir(w);
//打開目錄
while
((pdr
=
readdir(dir))!=null)
//讀/遍歷目錄
{
if(aflag==0)
//如果不帶a參數,越過以.開頭的所有文件/目錄
{
if(pdr->d_name[0]=='.')
continue;
memset(name,0,100);
strcpy(name,w);
//拷貝
strcat(name,"/");
//追加
strcat(name,pdr->d_name);
do_ls(name,pdr->d_name,lflag);
}else
//有a參數顯示所有
{
memset(name,0,100);
strcpy(name,w);
strcat(name,"/");
strcat(name,pdr->d_name);
do_ls(name,pdr->d_name,lflag);
}
}
closedir(dir);
}else
//為文件則直接顯示
{
do_ls(w,w,lflag);
}
return
0;
}
int
main(int
argc,char
**argv)
{
int
aflag
=0;
int
lflag
=0;
char
c;
int
i;
while((c
=
getopt(argc,argv,"al"))!=-1)
//解析命令行參數,即-/--後面的字元串和給定的字元串匹配,有未解析字母返回字母或問號(取決於第3個參數),否則返回-1
{
switch(c)
//此處僅匹配a(所有)和l(列表),即只支持參數a、l
{
case
'a':
aflag
=1;
break;
case
'l':
lflag
=1;
break;
default:
break;
}
}
if(argc
==
optind
)
//optind系統變數,執行命令參數的個數(不包括命令,奇怪的是無參情況下他為1),判斷argc是否為1,是則取當前路徑,讓我們顯得更專業點
{
ls_prepare("./",aflag,lflag);
}
else
{
for(i=optind;i<argc;i++)
//所有目錄都傳進去
ls_prepare(argv[i],aflag,lflag);
}
printf("\n");
return
0;
}

熱點內容
安卓怎麼上傳音樂到網易雲 發布:2025-07-18 07:22:22 瀏覽:372
c語言保存txt文件 發布:2025-07-18 07:01:27 瀏覽:175
android線程訪問網路 發布:2025-07-18 06:57:15 瀏覽:895
怎麼創建boa伺服器 發布:2025-07-18 06:52:09 瀏覽:697
大盤指標源碼 發布:2025-07-18 06:51:33 瀏覽:924
python粘貼板 發布:2025-07-18 06:46:20 瀏覽:796
pro241會有什麼配置 發布:2025-07-18 06:46:15 瀏覽:648
android下載實例 發布:2025-07-18 06:43:00 瀏覽:446
java完全數 發布:2025-07-18 06:40:46 瀏覽:276
微信投訴怎麼上傳圖片 發布:2025-07-18 06:40:38 瀏覽:787