问题
您想解压缩一个目录及其所有子目录中的所有个压缩文件。
解决方案
使用 bash 和实用程序 find 将当前目录中所有内容的列表输出到控制台。使用循环结构来解压缩每个文件。
解压当前目录下所有文件:
$ for file in `ls -1`; do
sudo tar -xvf "${file}" ; done
解压当前目录和任意子目录下的所有档案(我个人最喜欢的):
$ for file in `find *`; do
sudo tar -xvf "${file}" ; done
递归解压所有档案,并对剩余的档案再次执行相同操作:
# Make the above loop a function to be called more than once
# In case of compressed files inside compressed files this will
# run twice the previous snippet.
$ function decompress_all_complete () {
function decompress_all () {
for file in `find *`; do
sudo tar -xvf "${file}" ; done
} ;
for i in `echo {1..2}`; do
decompress_all_complete; done
}
如果你喜欢冒险,你可以使用这个 for 循环的变体 :-)
$ for program in tar unzip untar ; do # You could simply add to this list...
for file in `find *`; do
sudo `which "${program}"` -xvf "${file}" ;
done ;
done
讨论
实用程序find 列出了您当前目录中的所有内容,而且速度很快。下面的 sn-p 每次将文件解压到一个目录,但说明了以下所有代码的简单逻辑。以上是解决此问题的选项和变体;起初我假设您当前的工作目录包含您要解压缩以使用最简单版本的 sn-p 的所有文件。
这个伪代码试图简单地传达我的解决方案背后的逻辑:
#Use all decompressing programs locally installed :: apropos compress
for --temp_container_1-- in --list_of_programs_to_decompress_files-- ; do
# run each program through every file in the current directory
for --temp_container_2-- in --list_of_files-- ; do
# use program with x options on y file
sudo "${temp_container_1}" [TYPE COMMON OPTIONS] "${temp_container_2} ;
# Successfully decompressed some files. Try another program.
done ;
# There is nothing else to do.
done
上下文
我使用 or 测试了这些 sn-ps:
* Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt9-3 (2015-04-23) x86_64 GNU/Linux
* find (GNU findutils) 4.4.2
* GNU bash, version 4.3.33(1)-release (x86_64-pc-linux-gnu)
* tar (GNU tar) 1.27.1