使用文件夹和文件大小递归列出文件

List files recursively with folder and file size

我想以纯文本形式共享目录摘要,其中包含文件名和大小。

This thread 显示具有人类可读文件大小的文件列表,例如在 macOS 上:

$ du -h -d 10
 14G    ./190803 Aaah
 13G    ./190804 (no sound)

This post 列出了具有漂亮树的文件结构:

$ find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
.
|____.DS_Store
|____190803 Aaah
| |____190803 Aaah.mp4
| |____DSC_0011.MOV
| |____DSC_0012.MOV
| |____DSC_0013.MOV
| |____DSC_0014.MOV
| |____DSC_0015.MOV
| |____DSC_0016.MOV
|____190804 (no sound)
| |_____DSC0018.MOV
| |_____DSC0019.MOV
| |_____DSC0020.MOV
| |_____DSC0021.MOV
| |_____DSC0022.MOV
| |_____DSC0023.MOV
| |____DSC_0017.MOV

如何将两者结合起来并在后一个树状显示中在每个项目、文件或文件夹旁边显示人类可读的文件大小?

试试这个:

find . -print0 | 
  xargs -0 -I% du -h "%" | 
  awk ' { 
      size =  
       = "" 
      print [=10=], "(" size ")" }
  ' | 
  sed -e 's;[^/]*/;|____;g;s;____|; |;g'

如果你想在行的前面增加文件大小,你可以试试这个:

find . -print0 | xargs -0 -I% du -h "%" | awk ' { size =  ;  = ""; print [=11=], size }' | sed -e 's;[^/]*/;|____;g;s;____|; |;g' | awk ' {size=$NF ; $NF=""; printf("(%5s) %s\n", size, [=11=]) }'

print0-0 处理带引号的案例文件路径,如 Getting error "xargs unterminated quote" when tried to print the number of lines in terminal .

你可以试试这个:

for f in $(ls -R); do wc -c $f;done