如何使用有限的命令在远程主机上递归解压缩 gz 文件?

如何使用有限的命令在远程主机上递归解压缩 gz 文件?

我的目录中有一堆.jpg.gz文件需要解压。

我知道解压命令是:

tar -xzvf FileNameHere.jpg.gz

但是是否有一个标志可以递归地解压缩目录中的文件?我有一百多个压缩文件,我不想手动解压缩每个文件。

另外,由于我通过 SSH 连接到托管服务,因此我只能使用以下命令:

arch
bzip2
cal
cksum
cmp
cp
crontab
basename
cd
chmod
ls
date
df
du
dos2unix
unix2dos
file
getfacl
gzip
head
hostid
tail
mkdir
mv
nslookup
sdiff
tar
uptime
wget
whois
unzip

答案1

要提取文件,您需要使用gzip

gzip -d *.jpg.gz

您提到递归地执行此操作;鉴于您没有find,您必须依次访问每个目录并运行上述命令。

答案2

如果您要访问的主机的 shellssh是 bash 版本 >= 4.0,您可以启用 globstar 选项。启用后,**glob 将递归匹配子目录。因此,以下内容应该满足您的需要:

shopt -s globstar
for gz_file in **/*.jpg.gz; do
    gzip -d "$gz_file"
done

无需手动递归到子目录。

答案3

虽然可以编写 shell 脚本来递归目录(但我认为您无权访问远程 sh),但您可以使用这个粗略但有效的快捷方式,假设您的远程受限 ssh 进行通配符扩展:

gzip -d *.jpg.gz
gzip -d */*.jpg.gz
gzip -d */*/*.jpg.gz
...

...取决于子目录的深度和大小。

注意:如果文件太多,最终可能会超出命令行长度限制

编辑:这曾经包含使用 ls -R 的答案,但不提供完整路径。

相关内容