複数のファイルをサーバーにインポートするのに役立ちます。スクリプトを作成しましたが、すべてのファイルを配置するわけではありません。
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
。
sftp
find
印刷されたファイル名に対して別々のコマンドを作成し、それをコマンドにパイプすることをお勧めします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 logfile
orコマンドの後のパイプにこのような内容を挿入できます。上書きする代わりに既存のログファイルに追加するには、次を使用します。find
cut
tee -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