递归创建目录中每个文件的文本文档

时间:2018-08-14 17:42:46

标签: bash terminal ls

我当前使用的脚本的一部分是使用“ ls -FCRlhLoprt”将根目录内的每个文件递归地列出到文本文档中。问题是,每次我运行脚本时,ls都会在其输出中包含该文档,因此文本文档每次运行时都会增长。我相信我可以使用-i或--i​​gnore,但是当ls使用一些变量时如何使用呢?我不断收到错误消息:

ls "$lsopt" "$masroot"/ >> "$masroot"/"$client"_"$jobnum"_"$mas"_drive_contents.txt . #this works

如果我尝试:

ls -FCRlhLoprt --ignore=""$masroot"/"$client"_"$jobnum"_"$mas"_drive_contents.txt"" "$masroot"/ >> "$masroot"/"$client"_"$jobnum"_"$mas"_drive_contents.txt #this does not work

我遇到错误。我基本上不想在第二次运行此命令时将输出包括回去。

此外,我要做的就是递归地为目录内的每个文件创建一个易于阅读的文档。如果有更好的方法,请告诉我。

1 个答案:

答案 0 :(得分:0)

  

此外,我要做的就是递归地为目录内的每个文件创建一个易于阅读的文档。如果有更好的方法,请告诉我。

要递归列出目录中的每个文件,find命令将完全按照您的要求进行操作,并根据需要允许对找到的文件进行进一步的编程操作。

示例:

要递归列出当前目录下的每个文件:

find ./ -type f

要列出/etc//usr/share下的文件,显示其所有者和权限:

find /etc /usr/share -type f -printf "%-100p %#m %10u %10g\n"

要递归地显示所有文件的行数,但忽略.git的子目录:

find ./ -type f ! -regex ".*\.git.*" -exec wc -l {} +

要在$masroot下搜索,但忽略过去搜索生成的文件,并将结果转储到文件中:

find "$masroot" -type f ! -regex ".*/[a-zA-Z]+_[0-9]+_.+_drive_contents.txt" | tee "$masroot/${client}_${jobnum}_${mas}_drive_contents.txt"

(其中某些内容在Mac上可能会稍有不同。有关更多信息,请参见man find。)