我知道在 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