ローカルディレクトリ内のすべてのディレクトリをリモートディレクトリに再帰的にアップロードするために、ncftpput
を使用する単純なシェルスクリプトを書きました。私のシェルスクリプト、upload.sh
このローカルディレクトリに配置され、アップロードから除外します。これを行う方法はありますか?
ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir /localDir/*
_
私はこのようにしてみました:
for i in `ls /localDir | grep -v upload.sh`; do
ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir /localDir/$i
done
_
しかし、スペースを持つディレクトリは2つのディレクトリと見なされます。例えば。 "私のディレクトリ"が考慮されます。
そのため、ls
の出力を解析しないでください。特にあなたが単純なワイルドカードで同じことをすることができるならば。
#!/ usr/bin/env. bash[。〜)のために。 / localdir/*;行う [["$ i" = */upload.sh]] &&続ける[。] ncftpput -r -v -u myusername -p mypassword myaddress/Remotedir "$ i" [。] [。]
他のすべての要素を別々にアップロードするための検索を使用できます。
find /localDir -mindepth 1 -maxdepth 1 ! -name "upload.sh" -exec ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir {} \;
テストのために、一致するファイルとフォルダを印刷するだけで、-exec
をスキップします。
BashのIFS
を再定義することも、シェルの同等のものではありますが、それでもe.を含むファイル名で失敗します。改行。
もちろん、最も簡単な解決策は、アップロード先のスクリプトをアップロードされるデータと混在させることです...