【问题标题】:Unix : how to tar only N first files of each folder?Unix:如何只压缩每个文件夹的 N 个第一个文件?
【发布时间】:2015-08-18 12:07:35
【问题描述】:

我有一个包含 2Gb 图像的文件夹,子文件夹有好几级。

我只想将每个(子)文件夹的 N 文件归档到 tar 文件中。我尝试使用find 然后tail 然后tar 但无法让它工作。这是我尝试过的(假设N = 10):

find . | tail -n 10 | tar -czvf backup.tar.gz

...输出此错误:

Cannot stat: File name too long

这里有什么问题?考虑一下 - 即使它有效,我认为它只会 tar 所有文件夹的前 10 个文件,而不是每个文件夹的前 10 个文件。

如何获取每个文件夹的第一个N 文件?

【问题讨论】:

标签: unix tar


【解决方案1】:

有一些怪癖的提案:顺序仅由find 中的顺序决定,因此“第一”没有明确定义。

寻找 。 -类型 f | awk -v N=10 -F / 'match($0, /.*\//, m) && a[m[0]]++

评论:

  1. 使用find . -type f 确保文件具有前导目录名前缀,以便下一步工作
  2. awk 命令跟踪此类前导目录名,并发出完整路径名,直到发出 N 个(此处为 10)具有相同前导目录的文件
  3. 使用xargs 调用tar - 我们正在收集常规文件名,它们需要作为该归档命令的参数
  4. xargs 可能会多次调用tar,所以我们将(-r 选项)附加到一个普通存档,然后在全部写入后压缩它

此外,您可能不希望将备份文件写入当前目录,因为您正在扫描该目录 - 这就是此建议写入 /tmp 的原因。

【讨论】:

  • 我有一条错误消息:awk: line 1: syntax error at or near ,
  • 什么版本的awk? Mine 是 GNU Awk 4.1.0,它的特性可能会有所不同。
猜你喜欢
  • 2016-04-08
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 2011-10-04
  • 2015-05-25
相关资源
最近更新 更多