Wildcards
為什麼 unrar 不能擴展這個表達式?
我在同一個目錄中有三個 RAR 文件
file1.rar
:file2.rar
和file3.rar
. 我想用一個使用擴展的命令來提取它們,記住在 , , 等的參數中必須對星號unrar
進行unzip
轉義7z
。我試過這個命令:
unrar x file\*rar
結果是:
UNRAR 5.00 beta 8 freeware Copyright (c) 1993-2013 Alexander Roshal No files to extract
但是,此命令有效:
unrar x file\*
這個命令有效:
ls file*rar
結果是:
file1.rar file2.rar file3.rar
那麼為什麼第一個命令不起作用呢?
它也不適用於 5.2.7(較新版本)。我建議嘗試
unrar x file\*.rar
一下,注意前面的點rar
。至少在 5.2.7 中,程式碼路徑略有不同,它在 5.2.7 中有效。為什麼?好吧,在瀏覽了 unrar 的原始碼幾分鐘後(
match.cpp
如果你想嘗試,請看一下!),我可以輕鬆地說“因為 Alexander Roshal 真的,真的,真的應該改用glob(3)
”。他為什麼不呢?可能是因為它在 AFAIK rar 起源的 Windows 上不可用。在 Windows 上,副檔名是特殊的,而且似乎
unrar
程式碼將其視為文件名的一部分——一個普通的、最終的尾隨*
將匹配一個,但*
中間的一個不會。不確定這是否是 Windows 上的預期行為,但肯定不是 Unix 上的行為。解決方法
像這樣處理破碎的理智方法可能是這樣的:
for f in file*rar; do unrar x "$f" done
讓 shell 擴展 glob 並一次解壓縮一個文件。只是希望您的文件中沒有任何文件
*
的名稱…我一開始說它在 5.2.7 中工作,這是錯誤的:我在測試時失去了反斜杠……