2013-12-11 199 views
1

我有一個文件結構如下:解壓文件夾父目錄保持壓縮文件夾名稱

  • 檔案/
    • 拉鍊/
      • zipfolder1.zip
      • zipfolder2.zip
      • zipfolder3.zip
        ...
      • zipfolderN.zip

我有一個解壓的文件夾父目錄「檔案」的腳本,但它是解壓文件夾的內容爲「檔案」目錄。我需要將壓縮文件夾保留爲「存檔」目錄下的文件夾。所得到的文件結構應該是這樣的:

  • 檔案/
    • 拉鍊/
      • zipfolder1.zip
      • zipfolder2.zip
        ...
    • zipfolder1/
      • 內容...
    • zipfolder2/
      • 內容...
    • ...

我目前使用下列內容:

find /home/username/archives/zips/*.zip -type f | xargs -i unzip -d ../ -q '{}' 

如何一世修改此行以保留原始文件夾名稱?這與使用../*一樣簡單嗎?

回答

2

你可以使用basename到拉鍊提取到所需的目錄:

find /home/username/archives/zips/*.zip -type f -exec sh -c 'unzip -q -d ../"$(basename "{}" .zip)" "{}"' \; 
+0

終端打開第二行,並且當我使用'等待輸入的解壓縮-q -d ../"$(basename「{ }「.zip)」「{}」';'我明白'basename'部分正在做什麼,但只能在不刪除''\;'的情況下才能工作。這給了我'../ home/username/archives/zips/zipfolder1.zip'而不是'../ zipfolder1'的路徑。看起來'basename'是單獨工作的,但不包含在$()中。 – Matt

+0

@Matt似乎有一個錯字。你可以嘗試上面的編輯嗎? – devnull

+0

這是工作。我將使用'-execdir'而不是'-exec',因爲腳本不是從「zips」目錄運行的,'../'可能會被解釋爲錯誤。 – Matt