rsyncがソースのサブフォルダからファイルをコピーしない理由を誰が教えてもらえますか? [コピー]

rsyncがソースのサブフォルダからファイルをコピーしない理由を誰が教えてもらえますか? [コピー]

rsync現在のフォルダ内のすべてのTIF画像ファイルを「Documents」の下の「HR」フォルダにコピーしようとしましたが、これまで成功しませんでした。

rsync -r *.tif /home/myusername/Documents/HR

私が見ることができるように、-rオプションは再帰コピー用ですが、このコマンドは現在のフォルダにあるすべてのTIFファイルのみをコピーします。

誰が私がどこに間違っているのか教えてもらえますか?

現在のフォルダには、数百のTIFファイルを含む多層サブフォルダがたくさんあります。

答え1

*シェルによって拡張されたコマンドラインにワイルドカード()があるので、rsync現在のディレクトリにあるTIFFファイルのリストを取得するのがわかります。たとえば、コマンドラインは次のように拡張できます。

rsync -r cry.tif frown.tif smile.tif /home/myusername/Documents/HR

これらのTIFFファイルはディレクトリではないため、rsyncそのファイルに再帰する方法はありません。

一方、これを試すと、rsyncディレクトリを見つけてそのディレクトリに再帰的に入る機会を活用できます。私はこの-aフラグを使用してファイルメタデータ(権限、タイムスタンプ)を保持します。この試みは、で終わるファイルだけでなく、すべてのファイルをコピーしますが、十分であれば.tif理解しやすい解決策は次のとおりです。

rsync -a . /home/myusername/Documents/HR/

これでパズルの最後の部分が近づきます。 (一致する)TIFFファイルのみをコピーするには再帰的ですが、そのファイルのみをコピーする必要があることを知らせる必要があり*.tifます。rsyncこれはコマンドの最も複雑な部分ですが、幸いなことに、rsyncマニュアルページでほとんど排他的に例として引用されています(man rsync「hidden」を参照して検索してください)。

rsync -am --include '*.tif' --filter 'hide,! */' . /home/myusername/Documents/HR/

答え2

私は通常読む男性コマンドを使用する前のページです。

したがって、を使用するときは、または()や(verbose)などのオプションをrsync使用します。-av-rlptgoDv-rlptgoD-a-v

編集(あなたのコメントの後):

私にも同じことが起こりました。数ヶ月前に使用法のセクションを読んでいましたが、違うかそこに(最初の例以降)、次のように書かれていましたNote that the expansion of wildcards on the commandline (*.c) into a list of files is handled by the shell...。私もそれが-r日付を守らずに-v便利であることがわかりました。-av完璧だと思います。

マニュアルページから:

[..]
USAGE
   You use rsync in the same way you use rcp. You must specify a source and a destination, one of which may be remote.

   Perhaps the best way to explain the syntax is with some examples:

          rsync -t *.c foo:src/

   This  would  transfer  all  files matching the pattern *.c from the current directory to the directory src on the machine foo. If any of the files already exist on the remote system then the rsync remote-update protocol is used to update the file by sending
   only the differences in the data.  Note that the expansion of wildcards on the commandline (*.c) into a list of files is handled by the shell before it runs rsync and not by rsync itself (exactly the same as all other posix-style programs). 

          rsync -avz foo:src/bar /data/tmp

   This would recursively transfer all files from the directory src/bar on the machine foo into the /data/tmp/bar directory on the local machine. The files are transferred in "archive" mode, which ensures that symbolic links, devices, attributes,  permissions,
   ownerships, etc. are preserved in the transfer.  Additionally, compression will be used to reduce the size of data portions of the transfer.

          rsync -avz foo:src/bar/ /data/tmp

   A  trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination.  You can think of a trailing / on a source as meaning "copy the contents of this directory" as opposed to "copy the directory by name",
   but in both cases the attributes of the containing directory are transferred to the containing directory on the destination.  In other words, each of the following commands copies the files in the same way, including  their  setting  of  the  attributes  of
   /dest/foo:

          rsync -av /src/foo /dest
          rsync -av /src/foo/ /dest/foo
   Note also that host and module references don’t require a trailing slash to copy the contents of the default directory.  For example, both of these copy the remote directory’s contents into "/dest":

          rsync -av host: /dest
          rsync -av host::module /dest

   You can also use rsync in local-only mode, where both the source and destination don’t have a ’:’ in the name. In this case it behaves like an improved copy command.

   Finally, you can list all the (listable) modules available from a particular rsync daemon by leaving off the module name:

          rsync somehost.mydomain.com::
  [...]

関連情報