怎样列出目录下面的文件名和文件大小?

时间:2021-02-27 21:37:36
现在有这样的目录结构
/home/test/doc1.txt
/home/test/doc2.txt
/home/test/sub/doc1.txt
/home/test/sub/doc2.txt

怎样可以把/home/test目录下面的文件名(包括绝对路径)和文件大小输出到指定文件里,
格式是
文件名,文件byte数

要求可选择是否也列出子目录下面的文件
不列出目录
求救!谢谢了

8 个解决方案

#1


ls -all -R >out_file

#2


抱歉,请看清楚问题,首先我需要包括绝对路径的文件名,单纯用ls是做不到的,
我可以用awk筛选出我需要的文件名和文件大小
命令如下:
ls -lR $dir | awk  '/^-/{print "/"$9","$5}'
但是这样只能输出这样的文件:
doc1.txt,128
doc2.txt,256
doc1.txt,1024
doc2.txt,2048

没办法给出绝对路径。。。。
头痛中!
大家帮帮忙啦,谢谢!

#3


#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <unistd.h>
 
int main(int argc,char *argv[])
{
        DIR  *dp;
        struct dirent *dirp;
 
 
if(argc!=2)
        err_quit("a signle argument is not allowed!");
if((dp=opendir(argv[1]))==NULL)
        err_sys("can't open the dir\n");
while((dirp=readdir(dp))!=NULL){
        printf("%s\n",dirp->d_name);
        }
        closedir(dp);
        exit(0);
}

may be

#4


ls -lR $dir | awk  '/^-/{print $dir"/"$9","$5}'
不就完了

#5


UP

#6


find /home/test -printf '%p: %kK\n'

#7


gettext(冰雪之崖):
抱歉,你给的方案我试过,但是。。。。
awk: Field $() is not correct.
 The input line number is 2.
 The source line number is 1.

代码如下:
#!/bin/sh
DIR="/home/ag/mobius"
ls -lR $DIR | awk  '/^-/{print $DIR"/"$9","$5}'
exit 0
所以。。。
不行呀:)

另: see22(小海)
如果使用了find,我怎么能保证我可以只列出当前目录下的文件呢?
因为我需要可选择列出子目录还是只列出当前给出的目录的文件信息

现在我手里有一个版本,请大家看看,现在还是没解决问题:
#!/bin/sh
DIR="/home/ag/mobius"
touch file2
rm file1 file2 
find $DIR -type f -print > file1
exec < file1
while read line
do
    ls -l $line  | awk  '{print $9","$5}'  >> file2
done
cat file2
exit 0

最后的结果放在file2里面
问题是。。。
如果我需要剔除"/home/ag/mobius"子目录下面的信息,我该怎么办?
谢谢

#8


find /home/test -printf '%p: %s byes\n' (查找子目录)
find /home/test -maxdepth 1 -printf '%p: %s byes\n' (查找当前目录)

#1


ls -all -R >out_file

#2


抱歉,请看清楚问题,首先我需要包括绝对路径的文件名,单纯用ls是做不到的,
我可以用awk筛选出我需要的文件名和文件大小
命令如下:
ls -lR $dir | awk  '/^-/{print "/"$9","$5}'
但是这样只能输出这样的文件:
doc1.txt,128
doc2.txt,256
doc1.txt,1024
doc2.txt,2048

没办法给出绝对路径。。。。
头痛中!
大家帮帮忙啦,谢谢!

#3


#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <unistd.h>
 
int main(int argc,char *argv[])
{
        DIR  *dp;
        struct dirent *dirp;
 
 
if(argc!=2)
        err_quit("a signle argument is not allowed!");
if((dp=opendir(argv[1]))==NULL)
        err_sys("can't open the dir\n");
while((dirp=readdir(dp))!=NULL){
        printf("%s\n",dirp->d_name);
        }
        closedir(dp);
        exit(0);
}

may be

#4


ls -lR $dir | awk  '/^-/{print $dir"/"$9","$5}'
不就完了

#5


UP

#6


find /home/test -printf '%p: %kK\n'

#7


gettext(冰雪之崖):
抱歉,你给的方案我试过,但是。。。。
awk: Field $() is not correct.
 The input line number is 2.
 The source line number is 1.

代码如下:
#!/bin/sh
DIR="/home/ag/mobius"
ls -lR $DIR | awk  '/^-/{print $DIR"/"$9","$5}'
exit 0
所以。。。
不行呀:)

另: see22(小海)
如果使用了find,我怎么能保证我可以只列出当前目录下的文件呢?
因为我需要可选择列出子目录还是只列出当前给出的目录的文件信息

现在我手里有一个版本,请大家看看,现在还是没解决问题:
#!/bin/sh
DIR="/home/ag/mobius"
touch file2
rm file1 file2 
find $DIR -type f -print > file1
exec < file1
while read line
do
    ls -l $line  | awk  '{print $9","$5}'  >> file2
done
cat file2
exit 0

最后的结果放在file2里面
问题是。。。
如果我需要剔除"/home/ag/mobius"子目录下面的信息,我该怎么办?
谢谢

#8


find /home/test -printf '%p: %s byes\n' (查找子目录)
find /home/test -maxdepth 1 -printf '%p: %s byes\n' (查找当前目录)