2015-05-28 4 views
7

Я хотел бы написать скрипт bash, чтобы рекурсивно перечислить все файлы (с полными путями) на sftp и взаимодействовать с путями локально после этого (так что единственное, для чего нужен sftp - это получение путей). К сожалению, «ls -R» там не работает.Список рекурсивно всех файлов на sftp

Любая идея, как сделать это с некоторыми основными POC действительно были бы оценены

Available commands: 

bye        Quit sftp 

cd path       Change remote directory to 'path' 

chgrp grp path      Change group of file 'path' to 'grp' 

chmod mode path     Change permissions of file 'path' to 'mode' 

chown own path      Change owner of file 'path' to 'own' 
df [-hi] [path]     Display statistics for current directory or 
           filesystem containing 'path' 
exit        Quit sftp 
get [-Ppr] remote [local]   Download file 
help        Display this help text 
lcd path       Change local directory to 'path' 
lls [ls-options [path]]   Display local directory listing 
lmkdir path      Create local directory 
ln [-s] oldpath newpath   Link remote file (-s for symlink) 
lpwd        Print local working directory 
ls [-1afhlnrSt] [path]    Display remote directory listing 
lumask umask      Set local umask to 'umask' 
mkdir path       Create remote directory 
progress       Toggle display of progress meter 
put [-Ppr] local [remote]   Upload file 
pwd        Display remote working directory 
quit        Quit sftp 
rename oldpath newpath    Rename remote file 
rm path       Delete remote file 
rmdir path       Remove remote directory 
symlink oldpath newpath   Symlink remote file 
version       Show SFTP version 
!command       Execute 'command' in local shell 
!         Escape to local shell 
?         Synonym for help 
+1

Вы пробовали команду 'find'? – 123

+0

Извините, я забыл упомянуть, что он также недоступен ... –

+0

Почему у вас так мало доступных команд? В этом списке отсутствует встроенный bash? – 123

ответ

2

Этот рекурсивный скрипт делает работу:

#!/bin/bash 
# 

[email protected] 
TMPFILE=/tmp/ls.sftp 

echo 'ls -1l' > $TMPFILE 

function handle_dir { 
    echo "====== $1 =========" 
    local dir=$1 
    sftp -b $TMPFILE "$URL:$dir" | tail -n +2 | while read info; do 
    echo "$info" 
    if egrep -q '^d' <<< $info; then 
     info=$(echo $info) 
     subdir=$(cut -d ' ' -f9- <<< $info) 
     handle_dir "$dir/$subdir" 
    fi 
    done 
} 

handle_dir "." 

заполнения URL с данными SFTP сервера.

+0

Hesitantly +1 - возможно, прямо укажите, что это откроет одно соединение 'sftp' для каждого каталога. – tripleee

0

Я просматриваю весь Интернет и нахожу отличный инструмент sshfs. Смонтируйте дерево удаленных каталогов через SSHFS. SSHFS - это удаленная файловая система, использующая SFTP-протокол для доступа к удаленным файлам.

Как только вы подключили файловую систему, вы можете использовать все обычные команды, не заботясь о том, что файлы на самом деле удалены.

sshfs помогает мне, может также помочь вам.

mkdir localdir 
sshfs [email protected]:/dir localdir 
cd localdir 
find . -name '*' 
Смежные вопросы