我正在尝试递归gunzip
文件 ( -r
) 但没有在其原始位置存储它们的权限。我知道要更改您所做的单个文件的位置gunzip {file} -c > {new file location}
,但我不知道您如何将两者结合起来,以便您说保留原始文件位置的原始目录结构并在新位置中具有相同的目录结构。
答案1
在带有 GNU find 的 Unix 上(包括 Linux),您可以将其用于递归和迭代
find . -name '*.gz' -exec sh -c 'gunzip -c "{}" >"/output/path/{}"' \;
在其他 Unix/find 嵌入的 {} 上可能无法工作,所以我认为你需要 shell(假设是 Bourneish)
find . -name '*.gz' | while read f; do gunzip -c "$f" >"/output/path/$f"; done
这假设没有子目录被命名为something.gz,这是不正常的;如果是这样添加-type f
.如果全部文件被 gzip 压缩,-type f
单独就足够了。
但这可能是更轻松到复制压缩文件树到可写位置第一的(在 Unix 上有很多方法:cp -R
、rsync -r
,tar cf - | (cd somewhere; tar xf -)
甚至在 Windows 上xcopy
)并解压缩副本。