次のコマンドがあります。
rsync -r --exclude="node_modules" "/r2g_shared_dir/vamoot"/* "/home/node/.docker_r2g_cache/b640e7fd-27a7-4dd8-8ca8-5363a1c59c35"
私は/ *を使用すると、ドットファイル(.で始まるファイル/フォルダ)がコピーされないことに気づきました...
このファイルをどのように含めることができるかをご存知ですか?
私の考えに最適なアプローチは、/*表記を捨てて、単に使用することです。
rsync -r --exclude="node_modules" "/r2g_shared_dir/vamoot" "/home/node/.docker_r2g_cache/b640e7fd-27a7-4dd8-8ca8-5363a1c59c35"
しかし、他の方法はありますか?
答え1
パターンマッチングをrsyncに残すことをお勧めします。これにより、その時点でシェル内のシェルとオプションに依存しなくなります。
これを行うとき:
rsync -a /some/dir/* host:/remote/dir/
/some/dir/*
次に、rsyncが実際に次のように実行されるようにその部分を拡張するようにシェルに要求します。
rsync -a /some/dir/adir /some/dir/afile /some/dir/anotherfile [etc] host:/remote/dir/
これはしばしば意図によく似ていますが、質問が提示されたという事実は常にそうではありません。したがって、以下を実行することをお勧めします。
rsync -a /some/dir/ host:/remote/dir/
今、rsyncは(recursiveの略語なので-a
)ディレクトリを再帰的に探索します。-rlptgoD
-r
/some/dir
/remote/dir
/some/dir
ソースパスはスラッシュで終わるため、/
送信されたファイル名はソースの場所のすべての部分を無視します。/some/dir
パスすると、dir
ディレクトリを明示的に同期させるように指示します。含むその名前。何が起こっているのか本当に理解していない限り、これらの混乱を避けるために、常に最後のスラッシュを追加する習慣を持つことをお勧めします。
答え2
私の考えに最適な方法は、アーカイブモード(-a)を使用することです。マニュアルページには、「これは-rlptgoDと同じです。これは、再帰的でほぼすべてを維持したいと言う簡単な方法です(- H重要な欠落があります):
rsync -a /source/path/ /destination/path/
- 常に末尾のスラッシュ/を使用してください。
- *はドットファイルを含まないので、使用しないでください。
- ディスクの読み取り/書き込みよりも遅いネットワークを介して転送する場合は、圧縮-zを検討してください。
答え3
これがbashの場合は、以下を設定できますdotglob
。
shopt -s dotglob
.
これは一致または一致しません..
(の逆.*
)。
したがって、同じコマンドを使用できます。
rsync -r --exclude="node_modules" "/r2g_shared_dir/vamoot"/* ...