使用Linux shell命令,如何递归搜索目录并将文件列表输出为两个值的CSV文件;路径&文件
例如,假设我有以下文件结构…
home/readme.txt.
home/web/fruit/grapes.pdf
home/web/animals/mammals/bears.gif
我想要一个带有输出的CSV文件…
home,readme.txt
home/web/fruit,grapes.pdf
home/web/animals/mammals,bears.gif
到目前为止,我最接近的是使用命令:
find home -type f | sed ‘s///,/g’
但这并不完全正确,因为上面的命令最终用逗号替换了所有的斜杠,而不仅仅是最后一个。
有人想过我该怎么做吗?
作为参考,我使用的是Redhat Enterprise Linux服务器。
提前感谢!
您可以使用sed
。由于正则表达式使用此工具是贪婪的,因此它将用,
:替换最后出现的字符/
sed 's#(.*)/(.*)#1,2#' file
如果您需要对目录中的所有文件执行此操作,请使用以下命令:
find -type f -exec sed 's#(.*)/(.*)#1,2#' {} ;
您正在寻找以/
结尾的最长前缀,可以在.*/
中找到。然后,您需要使用该前缀,可以使用(.*)/
捕获该前缀,并使用1
重播该前缀。
因此,将您的sed更新为sed 's/(.*)//1,/'
给予:
find home -type f | sed 's/(.*)//1,/'