2010-03-03 125 views
110

我有一個ZIP文件的目錄(在Windows機器上創建)。我可以使用unzip filename手動解壓縮它們,但是如何通過shell解壓縮當前文件夾中的所有ZIP文件?解壓目錄中的所有文件

使用Ubuntu Linux服務器。

回答

218

(未經測試),但this link提示:

解壓\ *拉鍊

+2

測試過,效果很好。 – jeffbyrnes 2014-01-25 17:24:38

+1

至少在bash中起作用。 – 2014-04-16 16:36:39

+2

\用於轉義*,正確嗎? – sdaffa23fdsf 2014-11-22 11:45:53

-2
for i in `ls *.zip`; do unzip $i; done 
+4

無用使用的'\'LS \''。 '因爲我在* .zip;做...;完成' – ephemient 2010-03-03 20:48:34

+12

*危險*使用ls。如果你有一個名爲「-j -o -d .. jackass.zip」的文件,該怎麼辦? – geocar 2010-03-03 20:50:26

26

解壓縮* .zip文件,或者如果他們在子文件夾,然後像

find . -name "*.zip" -exec unzip {} \; 
+0

解壓縮會執行通配符處理,因此名爲「* .zip」的文件將無法達到您所期望的效果。 – geocar 2010-03-03 20:52:03

+2

實際上,這將完全符合預期的結果,查找操作的結果正在傳遞給解壓縮 – 2015-08-13 02:20:28

+0

這將提取當前目錄中的所有zip文件,如果我想要zip文件(存在於子文件夾中)在各自的子文件夾? – 2018-02-16 08:44:59

53

只是放在一些引號,以逃避通配符:

unzip "*.zip" 
+1

+1這一個爲我工作。我必須用特定的格式解壓縮文件名,而限制其餘的文件。我只是把匹配的格式保存在雙引號內,並且它像魅力一樣工作。輸出告訴我成功處理的檔案數量。 – 2015-02-10 05:28:20

6

aunpack -e *.zip,安裝了atool。 具有智能處理錯誤的優勢,並且除非zip只包含一個文件,否則總是將其解壓縮到子目錄中。因此,不存在大量文件污染當前目錄的風險,因爲在沒有目錄結構的zip上存在unzip

2

使用此:

for file in `ls *.Zip`; do 
unzip ${file} -d ${unzip_dir_loc} 
done 
34

提取物在當前目錄下的所有壓縮文件與壓縮文件的文件名新迪爾斯。

前,將以下文件:

myfile1.zip 
myfile2.zip 

將被提取到:

./myfile1/files... 
./myfile2/files... 

shell腳本:

#!/bin/sh 
for zip in *.zip 
do 
    dirname=`echo $zip | sed 's/\.zip$//'` 
    if mkdir "$dirname" 
    then 
    if cd "$dirname" 
    then 
     unzip ../"$zip" 
     cd .. 
     # rm -f $zip # Uncomment to delete the original zip file 
    else 
     echo "Could not unpack $zip - cd failed" 
    fi 
    else 
    echo "Could not unpack $zip - mkdir failed" 
    fi 
done 
+2

這是征服一切的東西。不能相信它沒有投過高 – billynoah 2015-11-11 22:04:27

+0

這不處理文件名中的空格。 – 2016-11-17 18:54:00

+1

只需在文件名「''' – 2016-12-25 13:38:30

-3

使用

sudo apt-get install unzip 

unzip file.zip -d path_to_destination_folder 

解壓縮的文件夾中的Linux

+1

哇好的命令 – 2015-04-21 08:40:51

+0

這將只解壓縮單個文件,問題是解壓所有文件夾 – 2015-04-21 08:43:52

+0

公平地說,標題「解壓目錄中的所有文件」*可能含糊不清,也意味着「將單個壓縮文件解壓縮到單獨的目錄中」 – jdersen 2018-03-02 03:37:20

8
for i in *.zip; do 
    newdir="${i:0:-4}" && mkdir "$newdir" 
    unzip "$i" -d "$newdir" 
done 

這將解壓縮所有壓縮檔案與Zip文件的文件名命名爲新的文件夾。

a.zipb.zipc.zip將分別被解壓縮到abc文件夾。

1

for file in 'ls *.zip'; do unzip "${file}" -d "${file:0:-4}"; done

0

這是使用How to loop through a directory recursively to delete files with certain extensions教導的Pedro Lobitoanswer的變體:

shopt -s globstar 
root_directory="." 

for zip_file_name in **/*.{zip,sublime\-package}; do 
    directory_name=`echo $zip_file_name | sed 's/\.\(zip\|sublime\-package\)$//'` 
    printf "Unpacking zip file \`$root_directory/$zip_file_name\`...\n" 

    if [ -f "$root_directory/$zip_file_name" ]; then 
     mkdir -p "$root_directory/$directory_name" 
     unzip -o -q "$root_directory/$zip_file_name" -d "$directory_name" 

     # Some files have the executable flag and were not being deleted because of it. 
     # chmod -x "$root_directory/$zip_file_name" 
     # rm -f "$root_directory/$zip_file_name" 
    fi 
done 
-1

要解壓目錄中的所有文件,只要輸入這個cmd在終端:

unzip '*.zip' 
+0

這個答案是https://stackoverflow.com/a/2376135/6948900 – 2018-03-08 10:56:25

相關問題