打印每个文件的文件名和字符数 - 循环

时间:2018-02-12 14:14:41

标签: bash for-loop scripting

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

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

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

4 个答案:

答案 0 :(得分:2)

您可以使用数组

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

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

如果您不重复使用文件名列表,您也可以只执行

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

如果您想递归检查dirs,可以使用find

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

答案 1 :(得分:1)

假设文件/目录名称中没有空格,一个简单的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

答案 2 :(得分:0)

#!/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

答案 3 :(得分:0)

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

~$ 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