我想找到一个出现在任何目录中的 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 文件提取到当前工作目录中。