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