web-dev-qa-db-ja.com

ディレクトリをアップロードするときにファイルを除外します

ローカルディレクトリ内のすべてのディレクトリをリモートディレクトリに再帰的にアップロードするために、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つのディレクトリと見なされます。例えば。 "私のディレクトリ"が考慮されます。

  1. / localdir/my
  2. / localdir /ディレクトリ
1
SimonBS

そのため、lsの出力を解析しないでください。特にあなたが単純なワイルドカードで同じことをすることができるならば。

#!/ usr/bin/env. bash[。〜)のために。 / localdir/*;行う
 [["$ i" = */upload.sh]] &&続ける[。] ncftpput -r -v -u myusername -p mypassword myaddress/Remotedir "$ i" [。] [。]
2
user1686

他のすべての要素を別々にアップロードするための検索を使用できます。

find /localDir -mindepth 1 -maxdepth 1 ! -name "upload.sh" -exec ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir {} \;

テストのために、一致するファイルとフォルダを印刷するだけで、-execをスキップします。


BashのIFSを再定義することも、シェルの同等のものではありますが、それでもe.を含むファイル名で失敗します。改行。

もちろん、最も簡単な解決策は、アップロード先のスクリプトをアップロードされるデータと混在させることです...

6
Daniel Beck