Wildcards

為什麼 unrar 不能擴展這個表達式?

  • March 13, 2016

我在同一個目錄中有三個 RAR 文件file1.rarfile2.rarfile3.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 中工作,這是錯誤的:我在測試時失去了反斜杠……

引用自:https://unix.stackexchange.com/questions/203241