如何将存储库中所有文件的内容(与扩展无关)递归列出到单个文本文件中?

如何将存储库中所有文件的内容(与扩展无关)递归列出到单个文本文件中?

我知道在 bash 中使用“ls -R .”可以递归列出文件名。

我可以使用一些类似的命令来列出每个文件的内容,就像使用 ls 命令显示它们的名称一样。我的意思是针对单个文件或流,如标准输出。

有没有办法格式化此类命令的输出?比如说,在每个文件的内容之间添加几行空白行以提高可读性?

答案1

我偶然发现了一个相关的问题,因此我为此构建了一个小脚本,避免了处理实际的输出文件,并且它在 2023 年运行良好。

output_file="targetfile.txt"

# Remove the output file if it already exists to avoid including it in the search
if [ -e "$output_file" ]; then
  rm "$output_file"
fi

find . -type f | while read -r file; do
  # Skip the output file if it accidentally gets included in the search
  if [ "$file" = "./$output_file" ]; then
    continue
  fi

  # Output file path
  echo "$file"

  # Output file contents
  cat "$file"

  # Output new line as a separator
  echo
  echo
done > "$output_file"

此脚本首先检查 targetfile.txt 是否存在于当前目录中,并在运行 find 命令之前将其删除。然后,它在循环期间检查每个文件,如果 targetfile.txt 意外包含在搜索中,则跳过它。这样,输出文件就不会包含在结果中。

答案2

find . -type f | while read file;
do
  # Here you can do whatever you like
  # Like output a few empty lines
  echo
  echo

  # output filename
  echo $file      
  # this prints the contents of the file to STD OUT
  cat $file;

done > targetfile

答案3

使用 find 创建一个元脚本并将其通过管道传输到 sh。

$ find /home/jaroslav/tmp/su/  2>/dev/null \
    -printf 'echo -e \\\\n\\\\n%p\ncat "%p"\n' |sh

出去:

/home/jaroslav/tmp/su/
cat: /home/jaroslav/tmp/su/: Is a directory


/home/jaroslav/tmp/su/diff.tar.gz
J▒▒P▒▒M
6▒M)FR▒▒▒▒▒▒F2▒/9▒e▒▒s]▒N▒h▒▒ޫzr▒▒hD▒▒Z&▒▒X▒▒|*▒o▒▒z▒▒▒▒|x߁▒▒E▒▒▒4▒▒Kऺ▒▒J▒-▒B▒▒▒Z▒▒▒?▒▒▒▒▒
        ▒▒P▒▒鿶▒▒JF▒j▒=Z▒?%▒▒▒▒▒▒▒▒▒▒▒{▒▒▒M▒▒▒▒$▒▒q(

/home/jaroslav/tmp/su/while
while read line; do
    login=$(echo $line | cut -d : -f 1)
        echo $login
done < /etc/passwd

相关内容