簡體   English   中英

為什么這個xargs不起作用?

[英]Why doesn't this xargs work?

我一直在嘗試使用redis-cli在redis db中獲取所有值。 原則上,這是通過redis-cli keys "*" (返回所有鍵)和管道傳遞給redis-cli get (返回鍵的值)來完成的。

從那以后,我發現了一種方法:

echo 'keys YOURKEY*' | redis-cli | sed 's/^/get /' | redis-cli

但是在此之前,我嘗試過此操作,並且get命令似乎從未運行過。 我做錯了xargs嗎?:

redis-cli keys "*" | xargs -0 -I % redis-cli get "%"

我很欣賞“為什么不做這項工作”的問題,但我認為答案對於xargs感到困惑的人將是有益的。

您正在對xargs使用-0標志,該標志表示您的輸入項以空字符(ASCII 0)而不是空格終止。 redis-cli命令不太可能以這種格式輸出密鑰。 實際上,似乎產生的輸出只有一個鍵/行,如下所示:

# redis-cli keys "*"
_tooz_group:central-global
_tooz_beats:38225c46-7ed8-4c2a-b1eb-6400d0f99004
_tooz_beats:bea903f7-ab5d-4503-be19-f2029beece93
_tooz_beats:bd859c91-0245-45cf-a289-23fc25998e97
_tooz_beats:04528af5-dd97-41af-87a6-d7dc0c0d9f5d
_tooz_beats:974b9d9d-86ff-457e-9a5c-e857ec12a915
_tooz_beats:a55cfe65-f344-4ed4-9b9f-a0ace4d8f6d3

如果從xargs調用中刪除-0 ,它應該可以正常工作:

# redis-cli keys "*" | xargs -I% redis-cli get %

如果您有包含空格的鍵,則此鍵將不起作用(因為xargs期望輸入數據以空格分隔)。 在這種情況下,您可以將分隔符顯式設置為\\n

# redis-cli keys "*" | xargs --delimiter '\n' -I% redis-cli get %

我想你想要這個:

# Set some data
redis-cli set mb1 A
OK

# Set some more
redis-cli set mb2 B
OK

# Check the keys we have
redis-cli keys "mb*"
1) "mb1"
2) "mb2"


#Retrieve those puppies, passing one at a time with "-n 1"
redis-cli keys "mb*" | xargs -n 1 redis-cli get 
"A"
"B"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM