2009-07-22 138 views
1

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

回答

1

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

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

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

+0

第一个“。”是起始目录 - 所以给定的命令将在当前目录中启动,但您可以同样使用“find/path/to/share ...“ – caf 2009-07-22 05:00:31

+0

@caf,非常真实。而且,我在回答他的其他问题时已经谈到了这个问题。 – nik 2009-07-22 05:44:19

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

你可以重定向到一个文件。

+0

如何包含ou输入每个文件上的文件命令? – 2009-07-22 12:39:25

0
mount -v | awk '/smbfs/{ 
    cmd="ls -lsR "$3 
    while((cmd | getline d)>0){ 
     print d "->file "$3 
    } 
    close(cmd) 
}' 
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文件{} +,它会一次使用多个参数运行文件,但随后的输出不会与发现的-ls输出很好地交错。 (GNU发现的-execdir {} +目前的行为一样-execdir {} \;,由于bug workaround。如果你想在file输出的完整路径,在它上面的-ls输出使用-exec file {} \;以及。

find -ls输出是不太一样ls -l,因为它包含了inode块的前两个字段