BASH :: 从命令行在存档中查找文件
Posted
技术标签:
【中文标题】BASH :: 从命令行在存档中查找文件【英文标题】:BASH :: find file in archive from command line 【发布时间】:2009-11-05 17:13:08 【问题描述】:我知道如何使用 find 查找文件
# find /root/directory/to/search -name 'filename.*'
但是,如何查看档案,因为文件可以压缩到里面...
感谢
【问题讨论】:
【参考方案1】:我定义了一个函数(zsh,小改动 -> BaSh)
## preview archives before extraction
# Usage: show-archive <archive>
# Description: view archive without unpack
show-archive()
if [[ -f $1 ]]
then
case $1 in
*.tar.gz) gunzip -c $1 | tar -tf - -- ;;
*.tar) tar -tf $1 ;;
*.tgz) tar -ztf $1 ;;
*.zip) unzip -l $1 ;;
*.bz2) bzless $1 ;;
*) echo "'$1' Error. Please go away" ;;
esac
else
echo "'$1' is not a valid archive"
fi
你可以
find /directory -name '*.tgz' -exec show-archive \| grep filename \;
【讨论】:
看起来不错。一些 cmets:为什么 .tar.gz 是 gunzip+tar,而 .tgz 是 tar -zt?反正他们都是一样的。 bzless 在脚本中也做得不太好;-) 而且文件可能无论如何都是 tar.bz2,所以你真的需要 tar -jt 顺便说一句,这只会显示匹配文件的路径 inside 存档,这样你就不会知道存档的名称。 我可以建议使用file
命令来确定存档类型而不是文件扩展名【参考方案2】:
find /directory -name '*.tgz' -exec tar ztf \| grep filename \;
或类似的东西......但我不认为有一个“简单”的解决方案。
【讨论】:
【参考方案3】:如果您的存档是某种压缩的 tarball,您可以使用 tar 搜索特定文件并仅打印该文件名的功能。如果你的 tar 支持通配符,你也可以使用它们。例如,在我的系统上:
tar tf sprt12823.logs.tar --wildcards *tomcat*
打印:
tomcat.log.20090105
虽然 tarball 中有更多文件,但只有一个匹配模式“*tomcat*”。这样你就不必使用 grep。
您可以将其与 find 和 gunzip 或您使用过的任何其他压缩实用程序结合使用。
【讨论】:
以上是关于BASH :: 从命令行在存档中查找文件的主要内容,如果未能解决你的问题,请参考以下文章