使用 for 循环来捕获文件夹中的所有文件(包括文件名)?

使用 for 循环来捕获文件夹中的所有文件(包括文件名)?

通过直接在 shell 中执行的这个 for 循环,我可以捕获文件夹中所有文件的内容,并在其旁边显示值:

$ for f in *; do echo -e "\t"$f"\n"; cat $f; done

输出示例:

100 
    testfile1
    testfile3      <-No output because this file is empty
hello 
    testfile2

但我想打印右侧的值和左上角的文件,如下所示:

testfile1 
    100
testfile3
testfile2
    hello

我尝试交换 echo 和 cat 的位置,但这不起作用,它的工作原理与其他命令完全相同。

$ for f in *; cat $f; do echo -e "\t"$f"\n"; done

我怎样才能实现这个目标?

答案1

for f in *; do
  printf '%s\n' "$f"
  paste /dev/null - < "$f"
done

将打印文件名,后跟其内容,对于目录中的每个文件,每行前面都有一个制表符。

与 GNU 相同awk

gawk 'BEGINFILE{print FILENAME};{print "\t" $0}' ./*

或者避免打印空文件的名称(这不是 GNU 特定的):

awk 'FNR==1 {print FILENAME}; {print "\t" $0}' ./*

或者使用 GNU sed

sed -s '1F;s/^/\t/' ./*

答案2

for f in *; do echo -e "$(cat $f)\t"$f; done 

答案3

我找到了一个可能的解决方案:

for f in *; do echo -e $f"\n\t$(cat $f)"; done

相关内容