5

lftp の !find コマンドの結果からファイルを置きたいです。

私は試した:

$> lftp -u foo, sftp://bar
lftp foo@bar$> put < !find ./local -type f

でも失敗!!

これはうまくいきました:

$> lftp -u foo, sftp://bar
lftp foo@bar$> !find ./local -type f | awk '{print "put "$1}' > /tmp/files.lftp
lftp foo@bar$> source /tmp/files.lftp

他に方法はありますか!? stdio リダイレクト (パイプ、stdin...) を使用したいと思います。

4

3 に答える 3

3
source -e find ./local -type f \| sed \'s/^\(.*\)$/put \"\1\"/\'

このsedコマンドは、 の各出力行findを二重引用符 ( ") で囲み、先頭に aを追加しますput。これは、スペースやその他の重要な文字を含むファイル名では機能しますが、二重引用符や改行などを含むファイル名では失敗します...sedファイル名にそのような文字が含まれている場合は、それに応じて、によって実行される置換を拡張できます。

コマンド ライン パーサーによる解釈を回避するには\、パイプ記号 ( ) の前のバックスラッシュ ( )、二重引用符と単一引用符が必要であることに注意してください。のようなシェルでコマンドをテストするには、次を使用します。|lsftpsh

find ./local -type f | sed 's/^\(.*\)$/put "\1"/'
于 2013-12-31T02:10:41.740 に答える
1

ディレクトリの最大深度がわかっている場合は、次のようなlocal単純なmputコマンドを使用できます。

lcd local && mput * */* */*/* */*/*/*
于 2016-04-06T10:50:25.187 に答える