gsutil rm -I
λ₯Ό μ¬μ©νκ³ stdinμ ν΅ν΄ μμ ν URL λͺ©λ‘μ μ λ¬νλ €κ³ ν©λλ€.
gs://test-bucket/test-dir
μλ κΈ°μ‘΄ λλ ν 리μ κ²½μ° λ€μμ λ΄κ° μλν λͺ κ°μ§ λͺ
λ Ήμ
λλ€.
# verify directory exists
$ gsutil ls -d gs://test-bucket/test-dir
gs://test-bucket/test-dir/
$ echo "gs://test-bucket/test-dir" | gsutil -m rm -r -I
CommandException: No URLs matched
$ echo gs://test-bucket/test-dir | gsutil -m rm -r -I
CommandException: No URLs matched
$ gsutil -m rm -r -I <<< "gs://test-bucket/test-dir"
CommandException: No URLs matched
$ gsutil ls -d gs://test-bucket/test-dir | gsutil -m rm -r -I
CommandException: No URLs matched
λ΄κ° μ¬κΈ°μμ λκ°λ₯Ό λμΉκ³ μμ΅λκΉ?
μλμ, λλ λΉμ μ΄ λκ°λ₯Ό λμΉκ³ μλ€κ³ μκ°νμ§ μμ΅λλ€. μ λ μ΄κ²μ μ¬νν μ μμ΅λλ€. -DD ββνλκ·Έμ ν¨κ» μμ gsutil rm λͺ λ Ήμ μ€ννλ©΄ gsutilμ΄ ν΄λΉ κ°μ²΄λ₯Ό νμΈνκΈ° μν΄ APIλ₯Ό νΈμΆνμ§λ μλλ€λ κ²μ μ μ μμ΅λλ€.
name_expansion.pyλ₯Ό μ΄ν΄λ³΄λ©΄ stdin(_phew_)μμ μ€μ μ½μ΄μΌ νλ μμ±κΈ°λ₯Ό λννλ λ λ€λ₯Έ PluralityCheckableIterator κ°μ²΄λ₯Ό λννλ NameExpansionIteratorλ₯Ό λννλ PluralityCheckableIteratorλ₯Ό λ§λ€κ³ μμ΅λλ€. μ΄μ¨λ , λλ λͺ κ°μ§ λλ²κΉ μΈμ λ¬Έμ multiple_checkable_iterator.pyμ _PopulateHead() λ©μλμ λμ‘κ³ κΈ°λ³Έ μμ±κΈ°κ° StopIteration μμΈλ₯Ό λμ§κ³ μμμ λ°κ²¬νμ΅λλ€. μ΄μ λ μμ§ νμ€νμ§ μμ΅λλ€. 곧 κ³μ μ‘°μ¬νκ² μ΅λλ€.
μμ μ λν μ°Έκ³ μ¬ν:
μ€λ(gsutil λ²μ 4.28)μλ μ΄ λ¬Έμ κ° λ°μνμ΅λλ€. μλ €μ§ ν΄κ²° λ°©λ²μ΄ μμ΅λκΉ?
μ 머리λ‘λ λ€μ μ€ νλλ§ μκ°ν μ μμ΅λλ€. xargs
μ κ°μ κ²μ μ¬μ©νμ¬ μΈμλ₯Ό gsutilμ μ§μ μ λ¬νλ μμ λνΌ μ€ν¬λ¦½νΈλ₯Ό μμ±ν μ μμ΅λλ€.
μ λ λκ°μκ±° λ³΄κ³ ..
CommandException: No URLs matched
λ΄ λ²ν·μ tar νμΌμ 볡μ¬νλ λμ λμΌν μμΈκ° νμλ©λλ€. CommandException: No URLs matched
κ°μ λ¬Έμ λ₯Ό λ³΄κ³ μμ΅λλ€. μ μλ μ루μ μ΄ μμ΅λκΉ?
ν΄κ²° λ°©λ²μ΄ μλμ§ νμ€νμ§ μμ:
λλ λ¬λ¦¬κ³ μλ€ --
gsutil version: 4.34
κ·Έλ¦¬κ³ μ΄κ²μ μ»μΌμμμ€
CommandException: Destination URL must name a directory, bucket, or bucket
subdirectory for the multiple source form of the cp command.
μ€ννλ €κ³ ν λ:
gsutil cp -n -R gs://hail-common/vep/vep/GRCh37/loftee_data /vep/loftee_data_grch37
μ΄ κΈμ λ€λ₯Έ κ³³μ μ¬λ €μΌ νλμ§ μλ €μ£ΌμΈμ.
κ°μ¬ ν΄μ
λλ κ°μ λ¬Έμ κ° μμκ³ νμΌ μ΄λ¦μ λ³κ²½νκ³ μλνμ΅λλ€ :).
μ΄κ²μ λν μμμ΄ μμ΅λκΉ?
gsutil v4.59μμλ λμΌν λ¬Έμ κ° λ°μνμ΅λλ€. λ²ν·μ μ κ±°νλ €κ³ νλ©΄ μ½μμμ λ³Ό λ λ²ν·μ΄ λΆλͺ ν μ‘΄μ¬νλλ°λ λμΌν μ€λ₯κ° λ°μν©λλ€.
λ΅λ³μ΄ λ¦μ΄ μ£μ‘ν©λλ€. μ°λ¦¬ νμ νμ¬ λ€λ₯Έ μ°μ μμμ λͺ°λνκ³ μμΌλ©° νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν λμνμ΄ μμ΅λλ€. κ·Έλ¬λ λμ€μ μ°Έμ‘°ν μ μλλ‘ μ‘°μ¬λ₯Ό νμ΅λλ€.
μ΄κ²μ url_strs ν λ² μ¬κΈ°μ λ λ² λ°λ³΅λ©λλ€ λλ¬Έμ λ°μνλ κ² κ°λ€ https://github.com/GoogleCloudPlatform/gsutil/blob/d8626ae0ec4b4dc9fd729f115cdeefced4680cb5/gslib/commands/rm.py#L269 μ¬κ·κ° μμ²νλ κ²½μ°, κ·Έκ²μ μ λ¬λ©λλ€ μμ NameExpansionIterator https://github.com/GoogleCloudPlatform/gsutil/blob/d8626ae0ec4b4dc9fd729f115cdeefced4680cb5/gslib/commands/rm.py#L288
λ°λΌμ λ³Έμ§μ μΌλ‘ λ°λ³΅μλ₯Ό λ λ² λ°λ³΅νλ €κ³ νλ―λ‘ λ λ²μ§Έ μΈμ€ν΄μ€μμ λΉ λ°λ³΅μλ₯Ό μ»μ΅λλ€.
μ¬μ΄ μμ μ¦ λ³κ²½, λͺ©λ‘μ λ°λ³΅μλ₯Ό λ³ννλ κ²μ λλ€ https://github.com/GoogleCloudPlatform/gsutil/blob/d8626ae0ec4b4dc9fd729f115cdeefced4680cb5/gslib/commands/rm.py#L252μ μ
url_strs = [url for url in StdinIterator()]
κ·Έλ¬λ μ΄κ²μ stdinμμ μ€λ μ λ§ κΈ΄ λͺ©λ‘μ κ°μ§ μ¬μ©μλ νμ΄νλΌμΈμμ μ΄λ―Έ μ΄ κΈ°λ₯μ μ¬μ©νκ³ -rμ -Iμ ν¨κ» μ¬μ©νμ§ μλ μ¬μ©μμκ² μν₯μ μ€ μ μμ΅λλ€. μ΄κ²μ -rκ³Ό -Iλ₯Ό ν¨κ» μ¬μ©νλ κ²½μ°μλ§ μν₯μ λ―ΈμΉ©λλ€.
μ΄μμ μΈ μμ μ μ¬κ· νΉμ μ¬λ‘λ₯Ό μ κ±°νκ³ λμ NameExpansionIterator κ²°κ³Ό μ체λ₯Ό κΈ°λ°μΌλ‘ λ²ν· μμ λ₯Ό μ²λ¦¬νλ κ²μ λλ€.
ν΄κ²° λ°©λ²μ https://github.com/GoogleCloudPlatform/gsutil/issues/490#issuecomment -364611242μμ μ μνλ κ²μ λλ€.
λλ μ¬κ·(-r μ΅μ ) μ¬μ©μ νΌνκ³ λͺ©λ‘μ μ λ¬ν μ μμ΅λλ€.
gsutil ls gs://my_bucket/** | gsutil -m rm -I
μμ λͺ λ Ήμ λ²ν·μ λΉμ°μ§λ§ λ²ν·μ μ κ±°νμ§ μμΌλ©° μ κ±°νλ €λ©΄ λ³λμ λͺ λ Ήμ μ€νν΄μΌ ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
κ°μ λ¬Έμ λ₯Ό λ³΄κ³ μμ΅λλ€. μ μλ μ루μ μ΄ μμ΅λκΉ?