找到一个存档并将其解压到它所在的目录中

找到一个存档并将其解压到它所在的目录中

我想找到一个出现在任何目录中的 tar 文件,并用一行命令将其取消存档。我可以从主目录中单独找到它。但只能从它所在的目录中提取它。如何使用管道在一条线上完成这两项工作?

find -name any.tar ; tar xf any.tar我尝试过这个..我可以any.tar从任何目录中单独找到这个文件。并且tar xf还单独提取文件,但仅在any.tar所在的目录中。我想在一行中运行这两个命令,any.tar当从主目录编译命令时,它可以找到并提取它。

我对 Unix 完全陌生,请帮助我。谢谢。

答案1

这可能有帮助

find ./ -name '*.tar' -exec sh -c 'dir=$(dirname "$0"); tar -xvf "${0}" -C "${dir}"; done' {} \;

man页面tar

-C, --directory DIR
       change to directory DIR

答案2

我发现此页面正在搜索相同的问题,该建议并不直接对我有用,但稍微调整一下对我的用例有用:

find . -name "*.tar" -exec sh -c 'tar xvf {} -C $(dirname {})' \;

答案3

首先是找到:

要查找目录中的所有 tar 文件,您需要find $directory -iname "*.tar"注意:-iname是 gnu 扩展名,因此如果您不使用 gnu,则必须-name *.tar -o -name *.TAR这样做几乎是等效的。

现在添加您的工作 tar 命令:

find $directory -iname "*.tar" -print0 | xargs -0 --max-args=1 tar xf

这会将所有 tar 文件提取到当前工作目录中。

相关内容