我有一个 curl cronjob,它会定期将一堆 zip 文件下载到目标文件夹中。就像这样:
curl www.zipdownloadfile.com/file.zip > file.zip
现在我需要让 Ubuntu 解压该目标文件夹中的所有 zip 文件。
解压目标位置/文件夹中的所有文件的正确命令是什么?
谢谢
答案1
这是你的命令,它将解压目标文件中的所有 zip 文件
find /path-to-folder -name '*.zip' -exec unzip -d destination_folder {} +
去尝试一下 。
答案2
这里的问题是,unzip *.zip
由于某种原因,它不起作用。我猜 unzip 不接受文件的通配符路径参数。
Nux 的答案很好,但我使用了稍微不同的 find 命令版本。如果您进入已下载所有 zip 文件的文件夹,那么您只需运行:
find . -type f -name "*.zip" -exec unzip {} \;
这将使用 递归搜索当前工作目录和所有子目录.
,然后仅查找文件,-type f
然后搜索名为 *.zip with
-name and it will execute unzip
exec unzip and substitute the result of the search which is the full file name and place it with
{} after the unzip command as the argument.
\; 的任何内容,这只是表示“我完成了命令已完成”的神奇语法。
在 Ubuntu 16.04 中,下载大量文件后,此方法仍然对我有用,可以解压当前目录中的所有文件。
类似的命令也可用于解压您同时下载的一组 rar 文件:
find . -type f -name "*.rar" -exec unrar x -e {} \;
上述神奇的命令将搜索当前目录中的所有文件以及子目录中的所有文件夹和文件,以查找所有以 结尾的文件,.rar
然后将它们直接解压到当前工作目录中。
假设你想解压一堆刚刚下载的东西:
Fri Nov 17 10:56 AM Downloads: tree .
.
├── download1
│ ├── show01.r00
│ ├── show01.r01
│ ├── show01.r02
│ └── show01.rar
├── download2
│ ├── movie01.r00
│ ├── movie01.r01
│ ├── movie01.r02
│ ├── movie01.r03
│ └── movie01.rar
└── download3
├── program01.r00
├── program01.r01
├── program01.r02
├── program01.r03
└── program01.rar
3 directories, 14 files
这只是一个小例子,您可能有 20 个甚至 40 个不同的文件夹,每个文件夹都包含自己的主 .zip 文件或 .rar 文件,需要解压。将 CD 放入每个单独的下载目录中以使用“解压”既耗时又浪费。只需使用 find 命令!
sudo apt-get install unzip
sudo apt-get install unrar
cd ~/Downloads
find . -type f -name "*.rar" -exec unrar x -e {} \;
find . -type f -name "*.zip" -exec unzip {} \;