find - 如何为大量文件添加标题(空/非空)

我需要向大量 (>10k) 文本文件添加标题(单行)。假设 变量 $HEADER 确实包含适当的标题。命令

find -type f -name 'tdgen_2012_??_??_????.csv' | xargs sed -i "1s/^/$HEADER\n/"

效果不错。我面临的问题是一些数据文件 (tdgen_2012_?????????.csv) 是空的。 sed(1) 无法寻址文件中不存在的行。我决定管理空文件 以不同的方式:

echo $HEADER | tee $(find -type f -name 'tdgen_2012_??_??_????.csv' -empty) > /dev/null

由于空文件的数量,上面的命令不起作用。 tee(1) 无法写入无限数量的文件。还有的数量 可以超出命令行参数。

由于性能低下(tee(1) 可以一次写入多个文件),我不想使用 for-cycle。

我的问题:

  1. 是否存在同时处理两种数据文件(空/非空)的解决方案?
  2. 如果不是:如何有效管理空文件?

最佳答案

echo $HEADER > header
find -type f -name 'tdgen_2012_??_??_????.csv' \
    -exec sh -c '{ echo $HEADER; cat {}; } > tmp && mv tmp {}' \; -print

解释:

1. -exec sh -c "..." - 能够调用多个命令

2. { echo $HEADER;猫 {}; } > tmp && mv tmp {} - 将 $HEADER 和找到的文件连接到 tmp 并将 tmp 重命名为找到的文件.只是因为您不能执行 cat header {} > {}

3. -print - 显示每个更改文件的文件名

https://stackoverflow.com/questions/16544874/

相关文章:

haskell - Tree(Int,Int) 在 haskell 中是什么意思?

magento - 如何在 Magento 的 cms 页面上放置 php 语法

google-drive-api - 我如何将文件上传到我拥有具有编辑权限的共享链接的 Google

vba - 如何将 Microsoft Word 中当前选定段落的段落编号获取到 AppleScri

perl - Mojolicious 应用程序中的并行请求

db2 - SQLRPGLE 中 OPEN 游标上的 SQL -302

itextsharp - 使用 iTextSharp.ShowTextAligned() 添加水印

chef-infra - 是否有相当于 Berkshelf 的产品,但用于 Puppet 模块?

qt - 平均共享 QML 行中的水平空间

axapta - 根据用户输入启用/禁用向导的 FINISH 按钮