【问题标题】:Print file names and character count of each file - Looping打印每个文件的文件名和字符数 - 循环
【发布时间】:2018-07-22 17:49:03
【问题描述】:

我正在寻找一个 for 循环,它打印当前工作目录中所有文件和目录的名称以及每个文件和目录名称拥有的字符数。我目前有以下,它不能按我的意愿工作,对以下有什么建议吗?

#!/bin/bash
FILES=/c/Users/johndoe/unix/*

for i in $FILES
do
    echo "$FILES has" | wc -c
done;

【问题讨论】:

  • 为什么它现在可以按预期工作?
  • 当我运行这个脚本时,它没有列出文件名,它只列出了数字。我想列出说: File1 has 10 File2 has 18 File3 Has 28

标签: bash for-loop scripting


【解决方案1】:

你可以使用数组

Files=(/c/Users/johndoe/unix/*)
for i in "${Files[@]}"
do
        wc -c "$i"
done

您还应该引用您的变量,并且建议不要使用大写变量名,因为它们可能与环境变量冲突。

如果你不重复使用文件名列表,你也可以简单地做

wc -c /c/Users/johndoe/unix/*

如果你想递归检查目录,你可以使用 find

find /c/Users/johndoe/unix/ -type f -exec wc -c {} \;

【讨论】:

  • wc -c 恕我直言。他需要计算字符数,而不是行数。
【解决方案2】:

假设文件/目录名称中没有空格,一个简单的find 可以计算它找到的文件名中的字符。

$ find /c/Users/johndoe/unix/ -type f -exec wc -c {} \;
7751  /c/Users/johndoe/unix/a.txt
890 /c/Users/johndoe/unix/b.txt

不过,我并不完全清楚,您是否想要文件包含的字符,或者只是文件名中的字符。比如,a.txt5 个字符。

为此,您还需要做更多工作:

$ find /c/Users/johndoe/unix/ -exec basename {} \;| xargs -I {} sh -c 'p={};echo "${p} ${#p}"'
a.txt 5
ez.txt 6

【讨论】:

    【解决方案3】:
    #!/bin/bash
    
    for FILES in /c/Users/johndoe/unix/*
    do
        [ -f "${FILES}" ] && echo "$FILES" has $(wc -c "${FILES}" | awk '{print $1}')
    done
    

    试试看。脚本检查 "${FILES}" 是否为文件。如果是,计算字符并在输出中打印。

    我的输出($FILES 在我的情况下修改):

    nginx.py has 1245
    [sahaquiel@sahaquiel-PC ~]$ wc -c nginx.py 
    1245 nginx.py
    

    【讨论】:

    • 谢谢,最后的awk是干什么的?
    • @user3296793 仅打印第一列(字符数,您使用echo 打印的文件名。
    • 您是否对此进行了测试,它似乎根本不起作用?您正在对整个扩展的 $FILES 变量使用 -f,除非只有一个文件,否则该变量将始终返回 false。
    • 忽略大小写问题,FILE 会比 FILES 更好;该名称一次永远不会绑定多个文件名。
    • @chepner 同意,刚刚决定保护 OP 的变量名。
    【解决方案4】:

    也许这太晚了。但我找到了:)

    ~$ for i in $( find * ); do echo -n "$i has " ; echo -n $i | wc -c ; done
    2021-06-28-205544.term has 22
    backup.sh has 9
    file1.txt has 9
    welcome.sh has 10
    

    但我必须在此使用 2 echo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 2020-05-01
      • 2012-02-05
      • 1970-01-01
      • 2021-06-17
      相关资源
      最近更新 更多