1

ブランチ内のどこかに特定のディレクトリ名を含むディレクトリ ツリーのブランチのみをミラーリングしようとしています。私は何時間もかけてさまざまなことを試みましたが、役に立ちませんでした。

リモート FTP サイトには、次のようなディレクトリ構造があります。

image_db
  movies
    v2
      20131225
        xyz
          xyz.jpg
      20131231
        abc
          abc.jpg
      AllPhotos   <-- this is what I want to mirror
        xyz
          xyz.jpg
        abc
          abc.jpg
    v4
      (similar structure to 'v2' above, contains 'AllPhotos')
    ...
  tv_shows
    (similar structure to 'movies', contains 'AllPhotos')
  other
    (different paths, some of which contain 'AllPhotos')
  ...

親パスをそのままにして、「AllPhotos」ディレクトリのみのローカルミラーを作成しようとしています。

私はこれのバリエーションを試しました:

lftp -e 'mirror --only-newer --use-pget-n=4 --verbose -X /* -I AllPhotos/ /image_db/ /var/www/html/mir_images' -u username,password ftp.example.com

...ここで、「-X /*」はすべてのディレクトリを除外し、「-I AllPhotos/」は AllPhotos のみを含めます。これは機能しません。lftp はすべてをコピーするだけです。

私もこれのバリエーションを試しました:

lftp -e 'glob -d -- mirror --only-newer --use-pget-n=4 --verbose /image_db/*/*/AllPhotos/ /var/www/html/mir_images' -u username,password ftp.example.com

...そして、lftpは、実際には何も作成せずに、リモートディレクトリ構造を処理します。

基本的に、完全なディレクトリ パスのどこかに文字列 'AllPhotos' があるファイルのみをミラーリングしたいと考えています。

更新 1:

wget、rsync、ftpcopy、または lftp 以外のその他のユーティリティでこれを実行できる場合は、代替案の提案を歓迎します。

wget を試してもうまくいきませんでした:

wget -m -q -I /image_db/*/*/AllPhotos ftp://username:password@ftp.example.com/image_db

... wget のドキュメントでは -I パスでワイルドカードを使用できると記載されていますが、ディレクトリ構造全体を取得するだけです。

更新 2:

さらに調査した結果、おそらく独自のミラーリング ユーティリティを作成する必要があるという結論に達しましたが、まだ lftp に間違った方法でアプローチしているのではないかと疑っています。絶対パス。

4

1 に答える 1

0

1つの解決策:

curl -s 'ftp://domain.tld/path' |
    awk '/^d.*regex/{print $NF}' |
    xargs wget -m ftp://domain.tld/path/

または使用lftp

lftp -e 'ls; quit' 'ftp://domain.tld/path' |
    awk '/^d.*regex/{print $NF}' |
    xargs -I% lftp -e "mirror -e %; quit" ftp://domain.tld/path/
于 2014-01-10T19:18:32.467 に答える