获得"找到"的输出在CSV中

时间:2016-11-04 21:16:46

标签: linux sed find

我有一个项目,我试图将linux系统上的所有文件收集到CSV中,然后转储到数据库中。

我的脚本有

FIND_CMD $TARGET $OPTS -xdev $FS -printf "%h,%f,%y,%s,%TY-%Tm-%Td %TH:%TM:%.2TS\n"

但问题是我有文件名%f和目录名%h,其中包含逗号。

那么我想我可以把每个项目都放在引号中,这不会成为一个问题。

$FIND_CMD $TARGET $OPTS -xdev $FS -printf "\"%h\",\"%f\",\"%y\",\"%s\",\"%TY-%Tm-%Td %TH:%TM:%.2TS\"\n"

但后来我发现我的文件名中包含引号:(

所以我试图弄清楚我怎么能分和#34;用""引用整个事情。

示例:

  

" /家"" DIR""文件,名称"" F"" 1024&#34 ;, " 2016-11-04 11:11:00"

所以我想知道是否有一种方法可以让我sed作为-printf的一部分,所以我可以告诉find命令用&替换" s #34;" S

我的另一个想法是用find之类的东西替换find命令中的分隔符但如果文件名或目录名有|,我可能会遇到同样的问题in(可能)

对于我可能没有想到的任何其他创造性解决方案吗?

1 个答案:

答案 0 :(得分:0)

考虑在您的CSV中使用NUL作为分隔符,因为它不是Linux文件名/路径名中的有效字符 - Wikipedia refernce

这也是find命令提供-print0并且 Perl GNU Parallel 等工具产生相应开关的原因到:

find . -name '*.orig' -print0 | perl -n0e unlink

find . -print0 | parallel -0 ...