SFTPを使用して複数のファイルを配置する方法

SFTPを使用して複数のファイルを配置する方法

複数のファイルをサーバーにインポートするのに役立ちます。スクリプトを作成しましたが、すべてのファイルを配置するわけではありません。

cd /buffer/miscellaneous/new/
cd $(ls -t | head -n 1)
latest=$(find -mmin -60 | cut -d'/' -f2 | tail -n +2 | tr '\n' '\t')
/usr/local/bin/sshpass -p password sftp -oBatchMode=no [email protected]:/folder1 << 1
mput $latest*
bye

このコマンドの場合

find -mmin -60 | cut -d'/' -f2 | tail -n +2 | tr '\n' '\t'

出力は2つのcsvファイルです。

cgi_20111210_235524.csv cgi_20203127_125504.csv

これで問題は、mput最初のファイルだけを配置し、他のファイルは配置しないことです。

find コマンドの出力は次のようになります。

find -mmin -60
.
./cgi_20110911_135504.csv
./cgi_20111210_235524.csv
./cgi_20203127_125504.csv

ベストアンサー1

ディレクトリの代わりにファイルのみを検索するコマンドを追加すると、出力から行をスキップするコマンドを省略できますcut -d'/' -f2.find-type f

cut -d'/' -f2サブディレクトリにファイルがある場合、このコマンドはファイル名を生成しません。sftpこの場合、forコマンドも機能しません。したがって、深さを制限することをお勧めしますfind

sftpfind印刷されたファイル名に対して別々のコマンドを作成し、それをコマンドにパイプすることをお勧めしますsftp

{ find -maxdepth 1 -type f -mmin -60| cut -d'/' -f2 | sed 's/^/put /' ; echo bye ; } | /usr/local/bin/sshpass -p password sftp -oBatchMode=no [email protected]:/folder1

どのコマンドが生成されたかを見るには、sftpこの部分を省略してください| /usr/local/bin/sshpass

編集する

ファイル名を記録するには、tee logfileorコマンドの後のパイプにこのような内容を挿入できます。上書きする代わりに既存のログファイルに追加するには、次を使用します。findcuttee -a logfile

例:

{ find -maxdepth 1 -type f -mmin -60 | cut -d'/' -f2 | tee logfile | sed 's/^/put /' ; echo bye ; } | /usr/local/bin/sshpass -p password sftp -oBatchMode=no [email protected]:/folder1

おすすめ記事