如何使用 find 命令提取文件所在目录中的文件?

Coo*_*733 4 bash find tar

我尝试从它们所在的目录中提取多个文件:

for i in $(find . -name '*.tgz'); do  # search the tgz files and extract them
    tar -xvzf $i
done
Run Code Online (Sandbox Code Playgroud)

我预计该命令会将这些文件提取到它们所在的目录中,但是它们是在其目录之外提取的。如何确保 .tgz 文件被提取到它们所在的目录中?

ste*_*ver 8

您应该避免类似的结构for i in $(find . -name '*.tgz'); do ...- 请参见示例为什么循环查找的输出是不好的做法?- 相反,尽可能使用-exec-execdir直接在找到的文件上运行命令。

对于您的应用程序,-execdir将完全执行您想要的操作,tar即相对于每个.tgz文件的包含目录执行:

find . -name '*.tgz' -execdir tar -xvf {} \;
Run Code Online (Sandbox Code Playgroud)

另请参阅了解 的 -exec 选项find