首页 > 解决方案 > 使用 awk 获取文件的完整路径名及其大小

问题描述

我想获取file names followed by their size所有大小为 MB 或 GB 的文件。到目前为止,我已经做了很多:

LIST=$(ls -lh -d -1 $PWD/{*,} | awk '{ print $9":"$5 }')
for i in $LIST
do
    if [[ $( echo "$i" | cut -f2 -d: | egrep "M|G" | wc -l) -ne 0 ]]
                                     # egrep not working, only finds M
    then
            echo "$i" >> bigfiles
    fi
done

我得到的是:

amit@C0deDaedalus:~$ test/findbig
/home/amit/Batch:3.8M
/home/amit/Black:3.6M

我想要的是:

amit@C0deDaedalus:~$ test/findbig
/home/amit/Batch File Programming.pdf:3.8M
/home/amit/Black Panther - Legend Has It ( Instrumental ).opus:3.6M

filenames基本上,除了我得到的不完整之外,一切都很好。只显示第一个单词。我无法弄清楚逻辑或语法是否有问题,但我认为它与awk.

那么,如何在输出中获取文件的完整路径名(中间有空格)?

在 awk 中尝试过循环技巧,但不知道如何让两列都适合。

标签: bashlistawkspaces

解决方案


问题是由于文件名中的空格。for 循环使用空格作为分隔符。因此,列表中的第一项将是“/home/amit/Batch”,第二项是“File”,依此类推。

您可以使用 while 循环代替 for,例如:

ls -lh -d -1 $PWD/{*,} | awk '{ print $9":"$5 }' | while read LINE
do
    echo ${LINE}
    # do your stuff here
done

顺便说一句,如果您的唯一目的是找出大文件,您可能需要查看磁盘使用命令:

$ du -a | sort -rn | head

推荐阅读