Рекурсивно пересекать акции Samba? - PullRequest
1 голос
/ 22 июля 2009

Как в bash на linux написать команду для рекурсивного обхода смонтированных общих ресурсов и запуска команд для каждого файла, чтобы получить тип и размер файла, разрешения и т. Д., А затем вывести все это в файл?

Ответы [ 4 ]

1 голос
/ 22 июля 2009

Монтирование общего ресурса CIFS будет выглядеть как обычное дерево каталогов в оболочке linux.
Таким образом, команда для поиска по вашему запросу является общей.
Из базового каталога

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

Хорошо, это не дает подробности о типе файла;
это можно сделать с помощью -exec file filename для каждого файла.

0 голосов
/ 09 декабря 2009
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 {} +, он будет запускать файл один раз с несколькими аргументами, но тогда выходные данные не будут приятно чередоваться с выходными данными -ls команды find. (GNU find -execdir {} + в настоящее время ведет себя так же, как и -execdir {} \;, из-за ошибки . Используйте -exec file {} \;, если вы хотите, чтобы полный путь в выходных данных file, а также в -ls вывод над ним.

Вывод

find -ls не совсем совпадает с выводом ls -l, поскольку он включает в себя inode количество блоков в качестве первых двух полей.

0 голосов
/ 22 июля 2009
mount -v | awk '/smbfs/{
    cmd="ls -lsR "$3
    while((cmd | getline d)>0){
        print d "->file "$3
    }   
    close(cmd)
}'
0 голосов
/ 22 июля 2009
mount -v | grep smbfs | awk '{print $3}' | xargs ls -lsR

, который вы можете перенаправить в файл.

...