如何比较 tar 存档和目录中的文件列表?
我还在学习 Perl。 任何人都可以建议我比较 .tar.gz 和目录路径中的文件的 Perl 代码。
假设我有几天前获取的以下目录路径的 tar.gz 备份。
a/file1
a/file2
a/file3
a/b/file4
a/b/file5
a/c/file5
a/b/d/file and so on..
现在我想将此路径下的文件和目录与tar.gz备份文件进行比较。
请建议 Perl 代码来做到这一点。
I am still learning Perl. Can anyone please suggest me the Perl code to compare files from .tar.gz and a directory path.
Let's say I have tar.gz backup of following directory path which I have taken few days back.
a/file1
a/file2
a/file3
a/b/file4
a/b/file5
a/c/file5
a/b/d/file and so on..
Now I want to compare files and directories under this path with the tar.gz backup file.
Please suggest Perl code to do that.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
Perl 在这方面确实有些过分了。 shell 脚本就可以了。 不过,您需要采取的步骤:
diff -uR
两个文件夹并将输出重定向到某处(或者根据情况通过管道传输到less
)你就完成了。 不应超过 5-6 行。 一些快速且未经测试的东西:
Perl is kind of overkill for this, really. A shell script would do fine. The steps you need to take though:
diff -uR
the two folders and redirect the output somewhere (or perhaps pipe toless
as appropriate)And you're done. Shouldn't be more than 5-6 lines. Something quick and untested:
下面是一个示例,用于检查存档中的每个文件是否也存在于文件夹中。
这就是我测试的方法:
我删除/重命名了
config
,然后运行以下命令:输出如下:
我是 bash / shell 编程新手,所以可能有更好的方法来做到这一点。
Heres an example that checks to see if every file that is in an archive, also exists in a folder.
This is how I tested this:
I removed / renamed
config
, then ran the following:Which gave the output of:
I am new to bash / shell programming, so there is probably a better way to do this.
请参阅 Archive::Tar。
See Archive::Tar.
Archive::Tar
和File::Find
模块会很有帮助。 下面显示了一个基本示例。 它只是打印有关 tar 中的文件和目录树中的文件的信息。从您的问题中不清楚您要如何比较文件。 如果您需要比较实际内容,可能需要使用
Archive::Tar::File
中的get_content()
方法。 如果更简单的比较就足够了(例如,名称、大小和运行时间),那么您只需要下面示例中使用的方法即可。The
Archive::Tar
andFile::Find
modules will be helpful. A basic example is shown below. It just prints information about the files in a tar and the files in a directory tree.It was not clear from your question how you want to compare the files. If you need to compare the actual content, the
get_content()
method inArchive::Tar::File
will likely be needed. If a simpler comparison is adequate (for example, name, size, and mtime), you won't need much more than methods used in the example below.这可能是一个好的 Perl 程序的良好起点。 但它确实满足了问题的要求。
它只是拼凑在一起,忽略了 Perl 的大部分最佳实践。
将
config
重命名为config.rm
后,向README
添加额外的字符,更改install.sh
中的字符,并添加文件.test
。 这是它的输出:This might be a good starting point for a good Perl program. It does what the question asked for though.
It was just hacked together, and ignores most of the best practices for Perl.
After renaming
config
toconfig.rm
, adding an extra char toREADME
, changing a char ininstall.sh
, and adding a file.test
. This is what it outputted: