Shell 计算目录中名称为空的文件号
当目录名中的名称为空时,它不起作用。这里有谁能告诉我,我必须如何编辑这个shell脚本,以便这样的目录名也能被接受来计算它的文件内容吗?Shell 计算目录中名称为空的文件号,shell,unix,Shell,Unix,当目录名中的名称为空时,它不起作用。这里有谁能告诉我,我必须如何编辑这个shell脚本,以便这样的目录名也能被接受来计算它的文件内容吗? 谢谢我找到了我必须考虑的解决方案: 这将适用于所有类型的文件名: #!/bin/bash SAVEIFS=$IFS IFS=$(echo -en "\n\b") for i in $(find . -maxdepth 1 -type d); do echo -n " $i: "; (find $i -type f | wc -
谢谢我找到了我必须考虑的解决方案:
这将适用于所有类型的文件名:
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i in $(find . -maxdepth 1 -type d); do
echo -n " $i: ";
(find $i -type f | wc -l) ;
done
IFS=$SAVEIFS
工作原理
这会像您刚才所做的那样查找目录find-maxdepth 1-类型d
变为-exec sh-c'printf“%s:%i\n”“$1”“$(查找“$1”-键入f | wc-l)”计数器{}代码> 这会将每个目录名提供给一个shell脚本,该脚本对文件进行计数,这与您所做的类似 这里有一些技巧:
作为参数传递给shell脚本<代码>计数器计数器{}
(仅在shell脚本生成错误时使用。$0
将find
替换为它找到的目录名,这将作为{}
对shell脚本可用。这样做对于所有类型的文件名都是安全的 请注意,脚本中使用$1
时,它都在双引号内。这可以保护它进行分词或其他不需要的shell扩展$1
find . -maxdepth 1 -type d -exec sh -c 'printf "%s: %i\n" "$1" "$(find "$1" -type f | wc -l)"' Counter {} \;
谢谢,但是你能告诉我,如果我的解决方案(1)在特定的目录/文件名中出错了吗?我确实得到了要求的结果。仍在学习bash shell。这在包含换行符的名称上仍然失败。为什么要将
\b
添加到IFS
?
find . -maxdepth 1 -type d -exec sh -c 'printf "%s: %i\n" "$1" "$(find "$1" -type f | wc -l)"' Counter {} \;
for i in */; do
echo -n "${i%/}: "
find "$i" -type f | wc -l
done