Gsutil: CommandException: stdinμ—μ„œ rm으둜 URL을 전달할 λ•Œ μΌμΉ˜ν•˜λŠ” URL이 μ—†μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 12μ›” 21일  Β·  11μ½”λ©˜νŠΈ  Β·  좜처: GoogleCloudPlatform/gsutil

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

λ‚΄κ°€ μ—¬κΈ°μ—μ„œ λ­”κ°€λ₯Ό λ†“μΉ˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

같은 문제λ₯Ό 보고 μžˆμŠ΅λ‹ˆλ‹€. μ œμ•ˆλœ μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

λͺ¨λ“  11 λŒ“κΈ€

μ•„λ‹ˆμš”, λ‚˜λŠ” 당신이 λ­”κ°€λ₯Ό λ†“μΉ˜κ³  μžˆλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 저도 이것을 μž¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. -DD β€‹β€‹ν”Œλž˜κ·Έμ™€ ν•¨κ»˜ μœ„μ˜ gsutil rm λͺ…령을 μ‹€ν–‰ν•˜λ©΄ gsutil이 ν•΄λ‹Ή 객체λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ APIλ₯Ό ν˜ΈμΆœν•˜μ§€λ„ μ•ŠλŠ”λ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

name_expansion.pyλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ stdin(_phew_)μ—μ„œ 쀄을 읽어야 ν•˜λŠ” 생성기λ₯Ό λž˜ν•‘ν•˜λŠ” 또 λ‹€λ₯Έ PluralityCheckableIterator 객체λ₯Ό λž˜ν•‘ν•˜λŠ” NameExpansionIteratorλ₯Ό λž˜ν•‘ν•˜λŠ” PluralityCheckableIteratorλ₯Ό λ§Œλ“€κ³  μžˆμŠ΅λ‹ˆλ‹€. μ–΄μ¨Œλ“ , λ‚˜λŠ” λͺ‡ 가지 디버깅 인쇄 문을 multiple_checkable_iterator.py의 _PopulateHead() λ©”μ„œλ“œμ— 던쑌고 κΈ°λ³Έ 생성기가 StopIteration μ˜ˆμ™Έλ₯Ό λ˜μ§€κ³  μžˆμŒμ„ λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. μ΄μœ λŠ” 아직 ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 곧 계속 μ‘°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

μžμ‹ μ— λŒ€ν•œ μ°Έκ³  사항:

  • λŒμ•„κ°€μ„œ 졜근 컀밋을 톡해 이진 검색을 μˆ˜ν–‰ν•˜κ³  이것이 λ°œμƒν•˜κΈ° μ‹œμž‘ν•œ μ‹œμ μ„ ν™•μΈν•˜μ‹­μ‹œμ˜€.
  • ν…ŒμŠ€νŠΈμ—μ„œ 이것을 ν¬μ°©ν•˜μ§€ λͺ»ν•œ μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?
  • 이 λ™μΌν•œ μ ‘κ·Ό 방식은 cp λͺ…령에 λŒ€ν•΄ μž‘λ™ν•˜μ§€λ§Œ rmμ—λŠ” μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

였늘(gsutil 버전 4.28)에도 이 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. μ•Œλ €μ§„ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

제 λ¨Έλ¦¬λ‘œλŠ” λ‹€μŒ 쀑 ν•˜λ‚˜λ§Œ 생각할 수 μžˆμŠ΅λ‹ˆλ‹€. xargs 와 같은 것을 μ‚¬μš©ν•˜μ—¬ 인수λ₯Ό gsutil에 직접 μ „λ‹¬ν•˜λŠ” 얇은 래퍼 슀크립트λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.$ARG_MAX κ°’>_ 개체.

저도 λ˜‘κ°™μ€κ±° 보고..
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

μœ„μ˜ λͺ…령은 버킷을 λΉ„μš°μ§€λ§Œ 버킷을 μ œκ±°ν•˜μ§€ μ•ŠμœΌλ©° μ œκ±°ν•˜λ €λ©΄ λ³„λ„μ˜ λͺ…령을 μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰