递归遍历Samba股票?

时间:2009-07-22 04:07:08

标签: linux bash scripting cifs

使用linux上的bash,我如何编写一个命令来递归遍历已挂载的共享,并在每个文件上运行命令,获取文件类型和大小,权限等,然后将所有这些输出到文件中?

4 个答案:

答案 0 :(得分:1)

CIFS共享挂载看起来像linux shell中的常规目录树 因此,您需要搜索的命令是通用的 从基目录

find . -type f -exec ls -lsrt {} \; > file.txt

好的,这不会给你文件类型细节;
可以在每个文件上使用-exec file filename来完成。

答案 1 :(得分:0)

mount -v | grep smbfs | awk '{print $3}' | xargs ls -lsR

您可以将其重定向到文件。

答案 2 :(得分:0)

mount -v | awk '/smbfs/{
    cmd="ls -lsR "$3
    while((cmd | getline d)>0){
        print d "->file "$3
    }   
    close(cmd)
}'

答案 3 :(得分:0)

find $(mount -t smbfs | awk '{print $3}') -mount -type f -ls -execdir file {} \;
...
33597911    4 -rw-rw-r--   2 peter    peter           5 Dec  6 00:09 ./test.d\ ir/base
./base: ASCII text
  3662    4 -rw-rw-r--   2 peter    peter           4 Dec  6 02:26 ./test.txt...
./test.txt...: ASCII text
  3661    0 -rw-rw-r--   2 peter    peter           0 Dec  6 02:45 ./foo.txt
./foo.txt: empty
...

如果您使用-exec file {} +,它将使用多个参数运行一次文件,但是输出将不会与find的-ls输出很好地交错。 (由于bug workaround,GNU查找的-execdir {} +目前与-execdir {} \;的行为相同。如果您想要-exec file {} \;输出中的完整路径,请使用file与上面的-ls输出一样。

find -ls输出与ls -l不完全相同,因为它包含了一些块作为前两个字段的inode。