BASH :: 从命令行在存档中查找文件

     2023-03-06     52

关键词:

【中文标题】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 或您使用过的任何其他压缩实用程序结合使用。

【讨论】:

如何从存档目录中删除文件

】如何从存档目录中删除文件【英文标题】:Howcanideletefilesfromarchivedirectory【发布时间】:2020-07-1710:08:45【问题描述】:目录路径:/var/opt/rh/rh-postgresql96/lib/pgsql/archive计数:-bash-4.2$ls-lrt|wc-l3839-bash-4.2$ls-lrt*backup|wc-l14创建的文件示... 查看详情

从命令行查找目录中的文件

】从命令行查找目录中的文件【英文标题】:Findfileindirectoryfromcommandline【发布时间】:2010-10-1323:49:47【问题描述】:在eclipse和textmate等编辑器/ide中,有快捷方式可以快速找到项目目录中的特定文件。是否有类似的工具可以在bash... 查看详情

linuxwhereis命令怎么用

Linuxwhereis命令用于查找文件。该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。whe... 查看详情

从命令行在任何目录中启动 apache 服务器

】从命令行在任何目录中启动apache服务器【英文标题】:Startanapacheserverinanydirectoryfromcommandline【发布时间】:2012-11-2115:15:02【问题描述】:我希望能够从命令行启动apache服务器,输入类似apachesite-folder或apache.--port=2000的内容这应... 查看详情

如何从命令行在 Windows 上运行 .class 文件?

】如何从命令行在Windows上运行.class文件?【英文标题】:HowdoIrun.classfilesonwindowsfromcommandline?【发布时间】:2011-02-2107:39:40【问题描述】:我正在尝试从命令行运行.class文件。当我手动移动到它存储的目录时它可以工作,但是当... 查看详情

从 Windows 10 命令行在 Epson 收据打印机上打印

】从Windows10命令行在Epson收据打印机上打印【英文标题】:PrintingonEpsonreceiptprintersfromWindows10commandline【发布时间】:2021-08-1423:03:00【问题描述】:我希望可以简单地用文本和控制字符(ESC/POS)编写记事本文本文件,然后将该文件复... 查看详情

从命令行在脚本中运行的 Docker 命令

】从命令行在脚本中运行的Docker命令【英文标题】:DockercommandstoruninscriptfromCommandLine【发布时间】:2019-06-1121:44:24【问题描述】:我需要以下命令的帮助才能在CMD中输入脚本。我已经完成了docker的所有设置。1)在CMD处运行:dockerr... 查看详情

从命令行在 sublime 中打开 git diff

】从命令行在sublime中打开gitdiff【英文标题】:Opengitdiffinsublimefromcommandline【发布时间】:2015-04-2120:57:33【问题描述】:如何从终端打开sublime中的gitdiff?【问题讨论】:【参考方案1】:首先,确保您可以从命令行访问subl命令:O... 查看详情

在 bash 循环中执行时查找“找不到命令”

】在bash循环中执行时查找“找不到命令”【英文标题】:Find"commandnotfound"whenexecutedinbashloop【发布时间】:2017-07-0809:53:58【问题描述】:我正在尝试编写一个bash脚本来生成文件列表。我想我只是在一个循环中调用\'find\'。... 查看详情

在 Bash 中使用 ZIP 存档

】在Bash中使用ZIP存档【英文标题】:WorkwithZIParchiveatBash【发布时间】:2014-12-3004:59:34【问题描述】:我需要编写一个简单的Bash脚本。如何解压缩包含多个文件的存档(在同一目录中)并获取这些解压缩文件的路径?归档路径在$... 查看详情

使用bash shell脚本从文件中查找和提取特定字符串后的值?

】使用bashshell脚本从文件中查找和提取特定字符串后的值?【英文标题】:FindandExtractvalueafterspecificStringfromafileusingbashshellscript?【发布时间】:2020-08-0417:46:18【问题描述】:我有一个包含以下详细信息的文件:文件.txt+--------------... 查看详情

从存档中提取精确文件的快速方法

...时间】:2014-07-1019:30:24【问题描述】:我目前正在使用此命令从存档中仅提取1个.sql文件tarxzvf*.gz*.sql它位于.tar.gz内的第一层。喜欢:archive.tar.gzbla.sql文件夹...但似乎这个命令会扫描整个tar.gz并且需要很长时间。有什么快速的方... 查看详情

如何从命令行在 Microsoft Edge 中打开 URL?

】如何从命令行在MicrosoftEdge中打开URL?【英文标题】:HowtoopenURLinMicrosoftEdgefromthecommandline?【发布时间】:2015-09-1818:48:18【问题描述】:我需要在MicrosoftEdge(在Windows10上)中打开URL。当我调用startshell:AppsFolder\\Microsoft.MicrosoftEdge_8... 查看详情

使用 Bash 查找和复制文件 [重复]

...|sh我喜欢这种方式,因为它很灵活,因为我正在构建我的命令(可以通过任何命令)并在之后执行它。还有 查看详情

从控制台存档的 TARBall 中提取文件

...使用file-roller编译一段时间作为脚本例程,使用file-roller命令。现在我不得不将我的脚本更改为更“技术性”和跨平台直接引用TAR命令:为此,我只需cd到特定目录并使用此命令: 查看详情

如何通过命令行在pytest中传递参数

】如何通过命令行在pytest中传递参数【英文标题】:Howtopassargumentsinpytestbycommandline【发布时间】:2017-04-1407:08:49【问题描述】:我有一个代码,我需要从终端传递名称等参数。这是我的代码以及如何传递参数。我收到一个我不理... 查看详情

如何通过 BASH 中的 sed 命令从 Json 文件中删除 Json 对象

】如何通过BASH中的sed命令从Json文件中删除Json对象【英文标题】:HowtodeleteaJsonobjectfromJsonFilebysedcommandinBASH【发布时间】:2016-10-2723:17:48【问题描述】:我有一个JSON文件,其中需要删除一个JSON对象。有没有办法只使用sed命令删除... 查看详情

在(查找命令)时排除某个目录 - BASH [重复]

】在(查找命令)时排除某个目录-BASH[重复]【英文标题】:Excludeacertaindirectorywhile(findcommand)-BASH[duplicate]【发布时间】:2019-10-0807:54:27【问题描述】:这个Bash脚本遍历/app目录中的每个文件。这是树的层次结构/app_/a-/b-/test/unittest/... 查看详情