我尝试从它们所在的目录中提取多个文件:
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 文件被提取到它们所在的目录中?
您应该避免类似的结构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
。