Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 解压目录中的所有文件_Linux_Shell_Wildcard_Unzip - Fatal编程技术网

Linux 解压目录中的所有文件

Linux 解压目录中的所有文件,linux,shell,wildcard,unzip,Linux,Shell,Wildcard,Unzip,我有一个ZIP文件目录(在Windows计算机上创建)。我可以使用解压文件名手动解压它们,但如何通过shell解压当前文件夹中的所有ZIP文件 使用Ubuntu Linux服务器。这在bash中起作用,根据: for i in `ls *.zip`; do unzip $i; done 解压\*.zip 解压*.zip,或者如果它们在子文件夹中,则 find . -name "*.zip" -exec unzip {} \; 只需加上一些引号以转义通配符: unzip "*.zip" au

我有一个ZIP文件目录(在Windows计算机上创建)。我可以使用
解压文件名
手动解压它们,但如何通过shell解压当前文件夹中的所有ZIP文件


使用Ubuntu Linux服务器。

这在bash中起作用,根据:

for i in `ls *.zip`; do unzip $i; done
解压\*.zip


解压*.zip,或者如果它们在子文件夹中,则

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

只需加上一些引号以转义通配符:

unzip "*.zip"

aunpack-e*.zip
,安装了
atool
。 它的优点是能够智能地处理错误,并且总是解压到子目录中,除非zip只包含一个文件。因此,不存在用大量文件污染当前目录的危险,就像在没有目录结构的zip上使用
解压一样。

使用以下方法:

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

以下bash脚本将当前目录中的所有zip文件提取到具有zip文件名的新目录中,即:

以下文件:

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
使用

在linux中解压缩文件夹的步骤

for i in *.zip; do
  newdir="${i:0:-4}" && mkdir "$newdir"
  unzip "$i" -d  "$newdir"
done
这将把所有zip归档文件解压到以zip归档文件名命名的新文件夹中


a.zip
b.zip
c.zip
将分别解压缩到
a
b
c
文件夹中;解压缩“${file}”-d“${file:0:-4}”;完成

这是使用教学的一种变体:

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

要解压缩目录中的所有文件,只需在terminal中键入以下命令:

unzip '*.zip'

解压缩所有
.zip
文件,并将内容存储在与
.zip
文件同名的新文件夹中:

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
这是和地址的扩展:


这将提取当前目录中的所有zip文件,如果我希望在相应的子文件夹中提取zip文件(存在于子文件夹中),该怎么办


在任何POSIX shell中,这将为每个zip文件解压到不同的目录中:

for file in *.zip
do
    directory="${file%.zip}"
    unzip "$file" -d "$directory"
done

如果文件是
gzip'd
。然后使用:

gunzip -rfk .

从根目录以递归方式提取各个目录中的文件,方法是保留原始文件(或删除
-k
以删除它们)

如果“当前目录”是指zip文件所在的目录,则我将使用以下命令:


find-名称'*.zip'-execdir解压{}\;
摘自find的

与-exec类似,但指定的命令是从包含匹配文件的子目录运行的,该子目录通常不是您开始查找的目录。这是一种更安全的调用命令的方法,因为它在解析匹配文件的路径时避免了竞争条件。与-exec选项一样,“+”形式的-execdir将构建一个命令行来处理多个匹配的文件,但任何给定的命令调用都只列出存在于同一子目录中的文件。如果使用此选项,则必须确保$PATH环境变量未引用当前目录;否则,攻击者可以通过在您将运行-execdir的目录中留下一个适当命名的文件来运行任何命令



危险使用消毒剂。如果您有一个名为“-j-o-d..jackass.zip”的文件,unzip会进行通配符处理,因此名为“*.zip”的文件不会执行您所期望的操作。实际上,这将执行预期的操作,查找操作的结果将传递给UNZIPT。这将提取当前目录中的所有zip文件,如果我需要zip文件,该怎么办(存在于子文件夹中)要在相应的子文件夹中提取?@RishabhAgrahari我在中处理了您的评论。对于
gzip'ed
文件,请使用
gunzip-rfk。
在相应的文件夹中递归解压缩+1这一个对我有效。我必须用特定格式解压缩文件名,同时限制其他格式。我只是将匹配的格式保留在双引号,效果很好。输出告诉我成功处理的归档文件数量。在UbuntuForWindows子系统上运行得很好,2018年11月18日。最上面的答案不起作用。我们如何将它们提取到具有各自名称的目录中?这只会解压缩单个文件。问题是要解压缩所有文件夹公平,标题是“解压目录中的所有文件”可能不明确,也意味着“将单个存档解压到单独的目录中”"。我需要反斜杠。我不知道你为什么需要它,如果你使用Bash。重复的文件会发生什么?我想它会覆盖吗?在macOS上很好。这样做时,我得到的文件名与目录中所有zip文件都不匹配。带引号的版本在WSL上对我有效。文件名中也有空格,FWIW。这是征服一切的东西。不敢相信它没有被选为更高级别。这不涉及文件名中的空格。只需添加引号
"
文件名“saved my day!谢谢!我正在做一些循环、解压、执行操作、复制、grep something、删除。缺少的是如何在bash脚本中作为变量从file.gz转到file.gz。这个答案对我来说是伟大的重复。分别在它们的子文件夹中解压对*.zip中的文件执行
,这样更安全一些
right?或作为一行代码:
对于*.zip中的文件;解压缩“$file”-d“${file%.zip}”;完成
对于
gzip'ed
文件,使用
gunzip-rfk。
对于在各个文件夹中递归解压缩设置
查找:非法选项--n
使用解压6.00-还有人吗?
find.-name'*.zip'-exec sh-c'unzip-d“${1%.*}“$1”{}\
您忘记了目录列表。对于powershell中的windows:获取ChildItem'path to folder'-Filter*.zip |展开存档-DestinationPath'path to extract'-Force
gunzip -rfk .
-execdir command ;
-execdir command {} +