背景:我目前正在编写一个归档脚本,该脚本从某些文件夹及其内容创建压缩的 tarball。它应该能够将 gzip 压缩的存档与源同步,而无需解压缩存档或压缩源。为此,寻求的解决方案是将 的输出ls -l与 的输出同步tar -ztvf。
这两个命令都返回类似的输出,但略有不同。大多数差异可以通过正则表达式或 来解决cut。我无法轻松解决的一件事是以最大深度列出相对于查询目录的文件路径。
为了克服这个问题,我曾经找到每个文件,并使用以下命令find将它们输入:ls
find Webcam -exec ls -lR --time-style="+%Y-%m-%d %H:%M" {} \; | cut -f1,3- -d" " | sed "s/ /\//2" | sed "s/ \+/ /g"
Run Code Online (Sandbox Code Playgroud)
其中大部分管道用于格式化目的,find Webcam -exec ls -lR {} \;是有问题的部分,并且Webcam是测试文件夹。该命令的输出如下:
-rw-r--r-- debian/debian 162406 2014-04-12 13:42 2014-04-12-134210.jpg
-rw-r--r-- debian/debian 116247 2014-08-09 16:38 2014-08-09-163849.jpg
-rw-r--r-- debian/debian 96597 2015-03-15 19:39 2015-03-15-193905.jpg
-rw-r--r-- debian/debian 100795 2015-04-29 20:23 2015-04-29-202242.jpg
-rw-r--r-- debian/debian 97120 2015-08-02 13:42 2015-08-02-134230.jpg
-rw-r--r-- debian/debian 123835 2015-08-27 23:03 2015-08-27-230306.jpg
-rw-r--r-- debian/debian 97120 2015-08-02 13:42 Webcam/2015-08-02-134230.jpg
-rw-r--r-- debian/debian 100795 2015-04-29 20:23 Webcam/2015-04-29-202242.jpg
-rw-r--r-- debian/debian 116247 2014-08-09 16:38 Webcam/2014-08-09-163849.jpg
-rw-r--r-- debian/debian 96597 2015-03-15 19:39 Webcam/2015-03-15-193905.jpg
-rw-r--r-- debian/debian 162406 2014-04-12 13:42 Webcam/2014-04-12-134210.jpg
-rw-r--r-- debian/debian 123835 2015-08-27 23:03 Webcam/2015-08-27-230306.jpg
Run Code Online (Sandbox Code Playgroud)
现在的输出类似于tar -ztvf:
-rw-r--r-- debian/debian 162406 2014-04-12 13:42 Webcam/2014-04-12-134210.jpg
-rw-r--r-- debian/debian 116247 2014-08-09 16:38 Webcam/2014-08-09-163849.jpg
-rw-r--r-- debian/debian 96597 2015-03-15 19:39 Webcam/2015-03-15-193905.jpg
-rw-r--r-- debian/debian 100795 2015-04-29 20:23 Webcam/2015-04-29-202242.jpg
-rw-r--r-- debian/debian 97120 2015-08-02 13:42 Webcam/2015-08-02-134230.jpg
-rw-r--r-- debian/debian 123835 2015-08-27 23:03 Webcam/2015-08-27-230306.jpg
Run Code Online (Sandbox Code Playgroud)
明显的缺陷是ls将每个找到的项目列出两次,一次包含所需的路径,一次没有它。我如何“修复”ls将每个项目列出两次?
关于此错误的性质(例如幕后发生的情况)的其他见解非常受欢迎,同时也欢迎作为旁注解决整个归档问题的更实用的方法。然而,现在我认为这是一个挑战,我想解决它,所以主要重点应该放在限制ls.
问题是 findWebcam也找到了目录,并运行ls Webcam它列出了那里的所有文件。要仅列出文件,而不列出目录,请告诉 find
-type f
Run Code Online (Sandbox Code Playgroud)