LINUX.ORG.RU

Поиск файлов по samba-ресурсам... :-\


0

0

Как осуществить поиск файлов, например, всех видео файлов в локальной виндовой сети? Чем примонтировать все разделы smb? А потом обычный поиск по маске? Верно? о_О

Смотрел smb браузеры, но ни один не умеет искать файлы...

anonymous

ну... могу сказать, что в нашей сети у нас существует несоклько поисковиков, которые регулярно индексируют все шары=) а просто поиска тут быть не может=) только перебор всех компов, а , как показывает практика, это может повесить сеть, и по сему рекомендую создать сервер, который бы сканировал как нибудь.=)

billic ★★
()

[I] net-fs/fusesmb
     Available versions:  (~)0.8.5 0.8.7
     Installed versions:  0.8.7(18:42:40 24.09.2007)
     Homepage:            http://www.ricardis.tudelft.nl/~vincent/fusesmb/
     Description:         Instead of mounting one Samba share at a time, you mount all workgroups, hosts and shares at once.

Потом просто монтируешь на локальный каталог всю сеть и хоть
find'ом ищешь, хоть locate'ом после переиндексации.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Потом просто монтируешь на локальный каталог всю сеть и хоть

ну не знаю, я так smbnetfs юзаю=) но всёравно это будет сканировать всю локалку, а это ниайс, когда компов много. правда вот slocate просто так не индексирует у меня сеть=)

billic ★★
()
Ответ на: комментарий от billic

А как ты ещё можешь представить поиск, кроме как через полное сканирование ресурсов? :) Libastral пока с SMB по API несовместима.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

ну так я и говорю, что никак=) ток если нужно чтобы поиск был более, Чем у одного человека - то тогда лучше не каждому себе индексировать, а лучше иметь отдельный сервер, который бы индексировл как нибудь распределенно. одного, потом другого, чтобы онлайн-статус проверял=) и прочие вкусности=)

billic ★★
()
Ответ на: комментарий от billic

> правда вот slocate просто так не индексирует у меня сеть=)

Вероятно, у тебя так PRUNEFS в /etc/updatedb.conf настроено.

alexsaa
()

> Как осуществить поиск файлов, например, всех видео файлов в локальной виндовой сети?

либо смонтировать всю сеть через smbnetfs и искать через /bin/find, либо поднять на какой-нибудь машине ffsearch и искать через него.

gaa ★★
()

Делал так. Правда машины в AD и искал только в Documents and Settings

8<--------------------------------------------
#!/bin/bash

user=Administrator
password=Пароль_администратора
domain=Ваш_домен
mdir="/root/tmp"
dir="$mdir/Documents and Settings"
report=/root/multimedia-files.list

rm -f $report

while umount $mdir &>/dev/null
do
    sleep 1
done

for mash in $(net -s /etc/samba/smb.ads.conf -d 0 \
    -U $user%$password ads search '(objectclass=Computer)' \
    name 2>/dev/null | sed -e '/^$/d' -e 's/^.*:.//' | tr [A-Z] [a-z])
do

    grep -qw "$mash" < <(cat<<-EOF
#Список машин которые исключить из поиска
            dc1
            dc2
            somfy
            id
            andrey
        EOF
    ) && continue
    echo -- Try mashine $mash --
    if  ping -i 0.5 -c 3 -w 2 $mash &>/dev/null && \
        mount.cifs "//$mash/c$" $mdir \
       -ouser=$user,domain=$domain,password=$password,iocharset=koi8-r &>/dev/null
    then
        if [ -d "$dir" ]
        then
        {
            echo $mash -------------------------------
            find "$dir" -type f -iregex ".*\.wav$" -o -iregex ".*\.mp3$" -o -iregex ".*\.avi$" -o -iregex ".*\.swf$"
        }  | tee -a $report
        fi
        umount $mdir
    fi
done
8<----------------------------------------------------------

qwe ★★★
()
Ответ на: комментарий от qwe

Вот что я написал для себя :
#!/bin/sh
# Скрипт поиска видео файлов в локальной сети средствами самбы.
# TODO:
# + Строить список файлов в формате небходимым для запуска mplayer`a (нужен mplayer скомпиленный с возможностью работы с самбой)
# 1.Написань удобную морду.
# Version 0.5 stable
# Author : Croman13n3c
# ./lan_search [1,2 или 3]
prefix=/mnt/win_c/temp/
list="$prefix"1.txt           # окончательный вариант
temp="$prefix"temp.txt        # simple temp file
shares="$prefix"shares.txt    # хранятся шары
shares_end="$prefix"shares_end.txt
files="$prefix"files.txt      # список файлов (временный)
temp1="$prefix"temp1.txt
files_end="$prefix"files_end.txt #найденные файлы
ftp_ips="$prefix"ftp_ips.txt
ftp_files="$prefix"ftp_files.txt
ftp_shares="$prefix"ftp_shares.txt
ftp_files_end="$prefix"ftp_files_end.txt
ROOT_UID=0
if [ "$UID" -eq "$ROOT_UID" ]  # Настоящий "root"?
then
  echo "Вам повезло Вы -- root"
else 
echo "Вы не root (но мамочка вас тоже любит :) !"
exit 0
fi
function samba_ips ()
{
nbtscan -q -e 10.100.10.2-254 | awk '{print $1}' > "$list"
nbtscan -q -e 10.100.20.2-254 | awk '{print $1}' >> "$list" 
}
function init ()
{
:> "$shares"
:> "$files"
:> "$files_end"
:> "$ftp_ips"
:> "$ftp_shares"
:> "$ftp_files"
:> "$ftp_files_end"
:> "$files_end"
}
function build_shares ()
{
massiv_ip_adressov=( $(cat "$list") )  #  Записать содержимое файла в массив.
for element in $(seq 0 $((${#massiv_ip_adressov[@]} - 1))) #  ${#massiv_ip_adressov[@]}  дает число элементов массива
  do
   smbclient -N -L "//${massiv_ip_adressov[$element]}/" | grep Disk | awk '{print $1}' > "$temp"
   iconv -f cp1251 -t utf8 "$temp" > "$temp1" 
   temp_shares=( $(cat "$temp1") )
    for index in $(seq 0 $((${#temp_shares[@]} - 1)))
    do
     echo -n "//${massiv_ip_adressov[$element]}/"${temp_shares[$index]}""  | egrep -i "(vid|film|филь|вид|кин|klip|прикол|prikol|clip)" >>"$shares"
    done
  done
}
function find_files ()
{
:> "$shares_end"
cat "$shares" | sed -e s/"\/\/"// >> "$shares_end"
mount_points=( $(cat "$shares") )
for element in $(seq 0 $((${#mount_points[@]} - 1))) 
 do
  temp_i="$(echo ${mount_points[$element]} | tr -d [а-яА-Яa-zA-Z/_\`\'ьыъф])"
  temp_i1="$(echo ${mount_points[$element]} | tr -d [0-9/\.])"  
  mkdir /mnt/smb
  mkdir /mnt/smb/"$temp_i"
  wait
  mount -t cifs "${mount_points[$element]}" /mnt/smb/"$temp_i" -o guest
  find /mnt/smb/"$temp_i/" | egrep -i "(avi|mpeg|mpg|3gp|mp4|mov|vob|wmv|asf|flv)" >> "$files"
  wait
  umount /mnt/smb/"$temp_i"
  rmdir  /mnt/smb/"$temp_i"
  rmdir /mnt/smb/
  cat "$files" | sed -e s/"\/mnt\/smb\/$temp_i\/"/"smb\:\/\/$temp_i\/$temp_i1\/"/ >>"$files_end"
  :>"$files"
done
}
function clear_temp_files ()	
{
rm "$list"
rm "$list1"
rm "$temp"
rm "$temp1"
rm "$files"
rm "$shares"
rm "$shares_end"
rm "$ftp_files"
rm "$ftp_ips"
rm "$ftp_shares"
}
function ftp_finder()
{
nmap -p 21 -n '10.100.10,20.2-254' | awk '
/Inter/ { sub (/:/,""); n_last=$4}
/open/ { print n_last}' >> "$ftp_ips"
ftp=( $(cat "$ftp_ips") )
for element in $(seq 0 $((${#ftp[@]}-1)))
 do
mkdir /mnt/ftps
mkdir /mnt/ftps/"${ftp[$element]}/"
  curlftpfs ftp://"${ftp[$element]}/" /mnt/ftps/"${ftp[$element]}/" -o codepage=cp1251
  find /mnt/ftps/"${ftp[$element]}/" -maxdepth 1 -type d | egrep -i "(vid|film|филь|видео|кин|klip|прикол|prikol|clip|видио)" >> "$ftp_shares"
  shares_index=( $(cat "$ftp_shares"))  
  for index in $(seq 0 $((${#shares_index[@]}-1)))
    do
    find "${shares_index[$index]}/" -type f | egrep -i "(*.avi|*.mpeg|*.mpg|*.3gp|*.mp4|*.mov|*.vob|*.wmv|*.asf|*.flv)" >> "$ftp_files"
    wait
    done
  fusermount -u /mnt/ftps/"${ftp[$element]}/"
  rmdir /mnt/ftps/"${ftp[$element]}/"
  rmdir /mnt/ftps/
:>"$ftp_shares"	 
 done
cat "$ftp_files" | sed -e s/"\/mnt\/ftps\/"/"ftp\:\/\/"/ >>"$ftp_files_end"
}
if [[ "$1" = "1" ]]
 then
  init
  samba_ips
  build_shares
  find_files
  clear_temp_files
   elif [[ "$1" = "2" ]] 
    then
     init
     ftp_finder
     clear_temp_files
      elif [[ "$1" = "3" ]]
       then
         init
         samba_ips
         build_shares
         find_files
         ftp_finder
         clear_temp_files
else 
echo "Не указан параметр (lan_search 2)
 Параметры 
1 - поиск по самбе
2 - по фтп
3 - везде :)"
fi

Croman13n3c
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.