![如何递归提取文件夹未压缩但其中的文件已压缩的内容。](https://linux22.com/image/1010024/%E5%A6%82%E4%BD%95%E9%80%92%E5%BD%92%E6%8F%90%E5%8F%96%E6%96%87%E4%BB%B6%E5%A4%B9%E6%9C%AA%E5%8E%8B%E7%BC%A9%E4%BD%86%E5%85%B6%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%B7%B2%E5%8E%8B%E7%BC%A9%E7%9A%84%E5%86%85%E5%AE%B9%E3%80%82.png)
我已经尝试了我所知道的所有方法以及数十个关于此类事情的旧论坛帖子......但没有任何作用。
在现有 wordpress 目录被无意中删除后,我已将备份 wordpress 目录上传到 Web 服务器。
然而,我不知道为什么,备份存档的方式看起来很奇怪,我无法让该死的东西正确解压缩。
最好的情况下,我目前使用的方法可以解压缩所有 wordpress 目录/子目录,但其中的所有文件仍然以“.gz”文件扩展名压缩。
子文件夹中有超过 500 个文件需要执行此任务。
有人能给我一个简单直接的答案,告诉我如何完成这个任务吗?
我可以使用以下代码获得部分结果,但是,它不会递归进入非压缩子文件夹寻找更多“.gz”文件进行解压缩(注意...文件夹/子文件夹已解压缩,但其中的文件尚未解压缩)。
对于 wordpress 中的 f/.gz ; 执行 gunzip $f ; 完成*
答案1
您可以通过以下方式实现此目的find
(参见:手册页) 及其-exec
标志。对于 tar 档案,以下行将起到作用:
find wordpress/ -type f -name *.tar.gz -exec tar -xf {} \;
对于 gunzip 你可以使用:
find wordpress/ -type f -name *.gz -exec gunzip -k {} \;
如果同时存在两种文件类型,则需要执行一些不同的操作,首先运行不带-k
(保留文件)标志的 gunzip,然后运行 tar 文件的 find 行,并进行一点点改变:
find wordpress/ -type f -name *.gz -exec gunzip {} \;
find wordpress/ -type f -name *.tar -exec tar -xf {} \;
答案2
为了添加我标记为正确的答案...这里是一位朋友发布给我复制的代码和他的说明。
从 public_html/ 目录中,我尝试了以下两个代码选项。
对于 wordpress 中的 f/.gz ; 执行 gunzip $f ; 完成*
上述意味着,为了进入多个子级别,我需要通过添加更多子目录来反复进入,例如 wordpress/subdirectory/*.gz、wordpress/subdirectory/subdirectory/... 等。
最简单的选项是下面这个...首先测试
查找 wordpress/-name "*.gz"-exec ls-lh {} \;
ls -lh 不会破坏任何东西,但您可以看到它会弄乱哪些文件。如果文件正确,请将 ls -lh 更改为 gunzip。
查找 wordpress/-name "*.gz"-exec gunzip {} \;
答案3
阅读man find
,,man xargs
并执行以下操作:
find wordpress -type f -iname '*.gz' -print0 |\
xargs -0 -r -n 1 gunzip
为了测试,替换gunzip
为echo gunzip
答案4
添加@videonauth的答案:
如果您想将子文件夹中的 .tar.gz 文件解压到同一子文件夹中而不是运行命令的根文件夹中,则可以使用 -execdir 选项:
find wordpress/ -type f -name *.tar.gz -execdir tar -xf {} \;