gpt4 book ai didi

Unix : how to tar only N first files of each folder?

转载 作者:行者123 更新时间:2023-12-01 05:01:57 24 4
gpt4 key购买 nike

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

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

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

...输出此错误:
Cannot stat: File name too long

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

我怎样才能得到第一个 N每个文件夹的文件?

最佳答案

一个有一些怪癖的提议:顺序仅由 find 中的顺序决定,所以“第一”没有明确定义。

找 。 - 类型 f |
awk -v N=10 -F/'match($0,/.*\//, m) && a[m[0]]++ < N' |
xargs -r -d '\n' tar -rvf/tmp/backup.tar

gzip/tmp/backup.tar

注释:

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

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

    关于Unix : how to tar only N first files of each folder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32034207/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com