gpt4 book ai didi

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

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

我需要向大量 (>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 - 显示每个更改文件的文件名

关于find - 如何为大量文件添加标题(空/非空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544874/

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