作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要向大量 (>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。
我的问题:
最佳答案
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/
我是一名优秀的程序员,十分优秀!