我正在寻找一个for循环,它打印当前工作目录中所有文件和目录的名称,以及每个文件和目录名称所拥有的字符数。我目前有以下内容,它不能按照我的意图,对下面有任何建议吗?
#!/bin/bash
FILES=/c/Users/johndoe/unix/*
for i in $FILES
do
echo "$FILES has" | wc -c
done;
答案 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.txt
有5
个字符。
为此,你必须多做一点:
$ 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