加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Unix:如何只为每个文件夹中的N个第一个文件tar?

发布时间:2020-12-16 01:58:32 所属栏目:安全 来源:网络整理
导读:我有一个包含2Gb图像的文件夹,子文件夹有几个级别. 我想在tar文件中只存档每个(子)文件夹的N个文件.我试图使用find然后尾巴然后tar但无法让它工作.这是我尝试过的(假设N = 10): find . | tail -n 10 | tar -czvf backup.tar.gz …输出此错误: Cannot stat:
我有一个包含2Gb图像的文件夹,子文件夹有几个级别.

我想在tar文件中只存档每个(子)文件夹的N个文件.我试图使用find然后尾巴然后tar但无法让它工作.这是我尝试过的(假设N = 10):

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

…输出此错误:

Cannot stat: File name too long

这有什么不对?考虑它 – 即使它工作,我认为它只会tar所有文件夹的前10个文件,而不是每个文件夹的前10个文件.

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

解决方法

一个有一些怪癖的提案:订单只能由查找的订单决定,因此“第一”没有明确定义.

find . -type 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读