ディレクトリ「d」の下にいくつかのサブディレクトリabcがあります
どうすればそれらを一度除外できますか?
こんにちは@zffocussss !
-x
フラグを使用して、正規表現パターンを使用して多くのディレクトリまたはファイルを除外できます。 このドキュメントにはさらにいくつかの情報があります: //cloud.google.com/storage/docs/gsutil/commands/rsync
上記のリンク先のドキュメントの例を次に示します。
-x pattern
Causes files/objects matching pattern to be excluded, i.e., any matching files/objects will not be copied or deleted. Note that the pattern is a Python regular expression, not a wildcard (so, matching any string ending in "abc" would be specified using ".*abc$" rather than "*abc"). Note also that the exclude path is always relative (similar to Unix rsync or tar exclude options). For example, if you run the command:
gsutil rsync -x "data./.*\.txt$" dir gs://my-bucket
it will skip the file dir/data1/a.txt.
You can use regex alternation to specify multiple exclusions, for example:
gsutil rsync -x ".*\.txt$|.*\.jpg$" dir gs://my-bucket
NOTE: When using this on the Windows command line, use ^ as an escape character instead of \ and escape the | character.
それが役に立ったか、他に質問があれば教えてください!
上記のコメントを更新して、質問に固有の詳細をいくつか追加しました。 :)
上記のコメントを更新して、質問に固有の詳細をいくつか追加しました。 :)
こんにちは@catleeball 、私はそれを試してみます。
gsutil -d -x "a / | b / | c /" -rd gs:// my-bucket
GCPコンソールでバケットを確認しましたが、a、b、cはまだここにあります。
-xは、ディレクトリではなくファイルを除外できると思います。
こんにちは@zffocussss ! 問題は正規表現にあるようです。 これが私が今テストした例です:
このローカルディレクトリ構造を考えるとrsync-test
cball<strong i="9">@cball</strong>:~$ tree rsync-test/
rsync-test/
├── dirA
│ └── bar.txt
├── dirB
│ └── baz.txt
├── dirC
│ ├── baq.txt
│ └── dirCA
│ └── bat.txt
└── foo.txt
dirA
とdirCA
を除くすべてをアップロードするとします。 これを行うには、「パス文字列のサブ文字列 'dirA'またはサブ文字列 'dirCA'を確認してください」という正規表現を記述します。 これを行う1つの方法は次のとおりです。
cball<strong i="15">@cball</strong>:~$ gsutil rsync -r -x '^.*dirA.*$|^.*dirCA.*$' rsync-test gs://rsync-test-cball
Building synchronization state...
Starting synchronization...
Copying file://rsync-test/dirB/baz.txt [Content-Type=text/plain]...
Copying file://rsync-test/dirC/baq.txt [Content-Type=text/plain]...
Copying file://rsync-test/foo.txt [Content-Type=text/plain]...
/ [3 files][ 0.0 B/ 0.0 B]
Operation completed over 3 objects.
次に、バケットが希望どおりに表示されることを確認してみましょう。
cball<strong i="19">@cball</strong>:~$ gsutil ls gs://rsync-test-cball
gs://rsync-test-cball/foo.txt
gs://rsync-test-cball/dirB/
gs://rsync-test-cball/dirC/
cball<strong i="20">@cball</strong>:~$ gsutil ls gs://rsync-test-cball/dirB/
gs://rsync-test-cball/dirB/baz.txt
cball<strong i="21">@cball</strong>:~$ gsutil ls gs://rsync-test-cball/dirC
gs://rsync-test-cball/dirC/baq.txt
正規表現を作成するのに役立つ場合は、 https://regex101.com/
が正規表現をテストするための便利なWebサイトであることがわかりました。 正規表現の各部分にマウスを合わせると、その機能がわかります。 🙂
こんにちは@zffocussss ! 問題は正規表現にあるようです。 これが私が今テストした例です:
このローカルディレクトリ構造を考えると
rsync-test
cball<strong i="10">@cball</strong>:~$ tree rsync-test/ rsync-test/ ├── dirA │ └── bar.txt ├── dirB │ └── baz.txt ├── dirC │ ├── baq.txt │ └── dirCA │ └── bat.txt └── foo.txt
dirA
とdirCA
を除くすべてをアップロードするとします。 これを行うには、「パス文字列のサブ文字列 'dirA'またはサブ文字列 'dirCA'を確認してください」という正規表現を記述します。 これを行う1つの方法は次のとおりです。cball<strong i="16">@cball</strong>:~$ gsutil rsync -r -x '^.*dirA.*$|^.*dirCA.*$' rsync-test gs://rsync-test-cball Building synchronization state... Starting synchronization... Copying file://rsync-test/dirB/baz.txt [Content-Type=text/plain]... Copying file://rsync-test/dirC/baq.txt [Content-Type=text/plain]... Copying file://rsync-test/foo.txt [Content-Type=text/plain]... / [3 files][ 0.0 B/ 0.0 B] Operation completed over 3 objects.
次に、バケットが希望どおりに表示されることを確認してみましょう。
cball<strong i="20">@cball</strong>:~$ gsutil ls gs://rsync-test-cball gs://rsync-test-cball/foo.txt gs://rsync-test-cball/dirB/ gs://rsync-test-cball/dirC/ cball<strong i="21">@cball</strong>:~$ gsutil ls gs://rsync-test-cball/dirB/ gs://rsync-test-cball/dirB/baz.txt cball<strong i="22">@cball</strong>:~$ gsutil ls gs://rsync-test-cball/dirC gs://rsync-test-cball/dirC/baq.txt
正規表現を作成するのに役立つ場合は、
https://regex101.com/
が正規表現をテストするための便利なWebサイトであることがわかりました。 正規表現の各部分にマウスを合わせると、その機能がわかります。 🙂
ああ、なんてことだ。助けてくれてありがとう。それがpython正規表現だと知っている。pcreとshell正規表現を使った。
あなたは正しいです。gsutilで正規表現を確認する必要があります。
こんにちは@zffocussss ! 問題は正規表現にあるようです。 これが私が今テストした例です:
このローカルディレクトリ構造を考えると
rsync-test
cball<strong i="10">@cball</strong>:~$ tree rsync-test/ rsync-test/ ├── dirA │ └── bar.txt ├── dirB │ └── baz.txt ├── dirC │ ├── baq.txt │ └── dirCA │ └── bat.txt └── foo.txt
dirA
とdirCA
を除くすべてをアップロードするとします。 これを行うには、「パス文字列のサブ文字列 'dirA'またはサブ文字列 'dirCA'を確認してください」という正規表現を記述します。 これを行う1つの方法は次のとおりです。cball<strong i="16">@cball</strong>:~$ gsutil rsync -r -x '^.*dirA.*$|^.*dirCA.*$' rsync-test gs://rsync-test-cball Building synchronization state... Starting synchronization... Copying file://rsync-test/dirB/baz.txt [Content-Type=text/plain]... Copying file://rsync-test/dirC/baq.txt [Content-Type=text/plain]... Copying file://rsync-test/foo.txt [Content-Type=text/plain]... / [3 files][ 0.0 B/ 0.0 B] Operation completed over 3 objects.
次に、バケットが希望どおりに表示されることを確認してみましょう。
cball<strong i="20">@cball</strong>:~$ gsutil ls gs://rsync-test-cball gs://rsync-test-cball/foo.txt gs://rsync-test-cball/dirB/ gs://rsync-test-cball/dirC/ cball<strong i="21">@cball</strong>:~$ gsutil ls gs://rsync-test-cball/dirB/ gs://rsync-test-cball/dirB/baz.txt cball<strong i="22">@cball</strong>:~$ gsutil ls gs://rsync-test-cball/dirC gs://rsync-test-cball/dirC/baq.txt
正規表現を作成するのに役立つ場合は、
https://regex101.com/
が正規表現をテストするための便利なWebサイトであることがわかりました。 正規表現の各部分にマウスを合わせると、その機能がわかります。 🙂
ちなみに、これらはlinuxのパスにあるため、この正規表現形式をどのようにテストしますか。文字列ではありません。
ちなみに、これらはlinuxのパスにあるため、この正規表現形式をどのようにテストしますか。文字列ではありません。
こんにちは@zffocussss ! gsutil rsync
が実行されると、ソースディレクトリのディレクトリツリーをたどります。 除外パターンを含めると、各ファイル/ディレクトリが指定された正規表現と照合されます。
https://github.com/GoogleCloudPlatform/gsutil/blob/master/gslib/commands/rsync.py#L745
Python REPLを開くと、次のようなもので正規表現をテストできます。
cball<strong i="13">@cball</strong>:~$ python
Python 3.7.3 (default, Apr 25 2019, 13:07:15)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> r = re.compile('^.*dirA.*$|^.*dirCA.*$')
>>> dirs = ['rsync-test/dirA', 'rsync-test/dirB', 'rsync-test/dirC', 'rsync-test/dirC/dirCA']
>>> for d in dirs:
... if r.match(d):
... print('Regex matches: ' + d)
... else:
... print('Regex does not match: ' + d)
...
Regex matches: rsync-test/dirA
Regex does not match: rsync-test/dirB
Regex does not match: rsync-test/dirC
Regex matches: rsync-test/dirC/dirCA
または、オンライン正規表現テスターを使用している場合は、さまざまなディレクトリをプラグインして、一致するディレクトリと一致しないディレクトリを確認できます。 :slightly_smiling_face:
お役に立てば幸いです。 他にご不明な点がございましたら、@ zffocussssまでお知らせください。
ドライランモードで実行するには、rsyncコマンドの-n
フラグを使用することも価値があります。 これにより、意図しないファイルをコピーしたかどうかを確認できます。
スマートシンキング、 @ houglum ! :バルブ:
ちなみに、これらはlinuxのパスにあるため、この正規表現形式をどのようにテストしますか。文字列ではありません。
こんにちは@zffocussss !
gsutil rsync
が実行されると、ソースディレクトリのディレクトリツリーをたどります。 除外パターンを含めると、各ファイル/ディレクトリが指定された正規表現と照合されます。https://github.com/GoogleCloudPlatform/gsutil/blob/master/gslib/commands/rsync.py#L745
Python REPLを開くと、次のようなもので正規表現をテストできます。
cball<strong i="14">@cball</strong>:~$ python Python 3.7.3 (default, Apr 25 2019, 13:07:15) [GCC 7.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import re >>> r = re.compile('^.*dirA.*$|^.*dirCA.*$') >>> dirs = ['rsync-test/dirA', 'rsync-test/dirB', 'rsync-test/dirC', 'rsync-test/dirC/dirCA'] >>> for d in dirs: ... if r.match(d): ... print('Regex matches: ' + d) ... else: ... print('Regex does not match: ' + d) ... Regex matches: rsync-test/dirA Regex does not match: rsync-test/dirB Regex does not match: rsync-test/dirC Regex matches: rsync-test/dirC/dirCA
または、オンライン正規表現テスターを使用している場合は、さまざまなディレクトリをプラグインして、一致するディレクトリと一致しないディレクトリを確認できます。 🙂
お役に立てば幸いです。 他にご不明な点がございましたら、@ zffocussssまでお知らせください。
わかりました。なるほど。ありがとう。
ドライランモードで実行するには、rsyncコマンドの
-n
フラグを使用することも価値があります。 これにより、意図しないファイルをコピーしたかどうかを確認できます。
とても素敵なアドバイスです。これを使って何が起こるかを見ることができます
ちなみに、これらはlinuxのパスにあるため、この正規表現形式をどのようにテストしますか。文字列ではありません。
こんにちは@zffocussss !
gsutil rsync
が実行されると、ソースディレクトリのディレクトリツリーをたどります。 除外パターンを含めると、各ファイル/ディレクトリが指定された正規表現と照合されます。https://github.com/GoogleCloudPlatform/gsutil/blob/master/gslib/commands/rsync.py#L745
Python REPLを開くと、次のようなもので正規表現をテストできます。
cball<strong i="14">@cball</strong>:~$ python Python 3.7.3 (default, Apr 25 2019, 13:07:15) [GCC 7.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import re >>> r = re.compile('^.*dirA.*$|^.*dirCA.*$') >>> dirs = ['rsync-test/dirA', 'rsync-test/dirB', 'rsync-test/dirC', 'rsync-test/dirC/dirCA'] >>> for d in dirs: ... if r.match(d): ... print('Regex matches: ' + d) ... else: ... print('Regex does not match: ' + d) ... Regex matches: rsync-test/dirA Regex does not match: rsync-test/dirB Regex does not match: rsync-test/dirC Regex matches: rsync-test/dirC/dirCA
または、オンライン正規表現テスターを使用している場合は、さまざまなディレクトリをプラグインして、一致するディレクトリと一致しないディレクトリを確認できます。 🙂
お役に立てば幸いです。 他にご不明な点がございましたら、@ zffocussssまでお知らせください。
r = re.compile( '^。 / dirA/。$ | ^。* / dirA $ | ^ dirA')
dirs = ['rsync-test / dirA'、 'rsync-test / dirB'、 'rsync-test / dirC'、 'rsync-test / dirC / dirCA'、 'a / dirAk / b'、 'a / dirA / b '、' dirA / A / B / C ']
[18]の場合:dirsのdの場合:
...:r.match(d)の場合:
...:print( '正規表現の一致:' + d)
...: そうしないと:
...:print( '正規表現が一致しません:' + d)
...:
正規表現の一致:rsync-test / dirA
正規表現が一致しません:rsync-test / dirB
正規表現が一致しません:rsync-test / dirC
正規表現が一致しません:rsync-test / dirC / dirCA
正規表現が一致しません:a / dirAk / b
正規表現の一致:a / dirA / b
正規表現の一致:dirA / A / B / C
欲しいものが見つかるかもしれません。サブディレクトリなので、「/」を検討する必要があります。
また、GCP gsutilチームは、正規表現を操作するときに、少し複雑ですが実際に使用されているため、より多くの例を提供できることをお勧めします。
最も参考になるコメント
ドライランモードで実行するには、rsyncコマンドの
-n
フラグを使用することも価値があります。 これにより、意図しないファイルをコピーしたかどうかを確認できます。