SFTPを使用してリモートサーバーからマイサーバーにファイルをコピーするときにのみ、if関数を使用して必要なファイルをフィルタリングする必要があります。これは内部のすべてのデータを取得しようとする私の試みです/filesnew
。
#!/bin/bash
files=`sshpass -p 'XXX' sftp -P 2222 [email protected]<<EOF
cd /filesnew
ls
EOF`
files=`echo $files|sed "s/.*sftp> ls//"`
(
echo cd /filesnew
for file in $files; do
echo get $file /data/processedfiles/$file
done
) |sshpass -p 'XXX' sftp -P 2222 [email protected]
フィルタリングする必要があります"USER"
。
ex:
If($files==*USER*) then
echo get $file /data/processedfiles/$file
誰かがこれを行う方法を教えてもらえますか?
答え1
sftp
パターン(/filesnew/USER*
ディレクトリ内のリテラル文字列で始まるファイル名)と一致するすべてのファイルを取得し、それをディレクトリにローカルに保存するために使用されます。USER
/filesnew
/data/processedfiles
mkdir -p /data/processedfiles || exit
sftp -P 2222 [email protected] <<'END_SFTP'
get /filesnew/USER* /data/processedfiles
END_SFTP
これらのファイルを一覧表示する理由はありません。また、localhostのターゲットファイル名に言及する必要はなく、ターゲットディレクトリだけが現在のディレクトリと異なる場合にのみ言及できます。
mkdir
ローカルの宛先ディレクトリが常に存在すると確信している場合は、初期コマンドをスキップできます。
ちなみに、これはシェルの関数ではなく、「ドア」の一部であるif
「予約語」という点に言及する価値があります。if