gpt4 book ai didi

bash - 显示目录中文件和目录数量的 Shell 脚本

转载 作者:行者123 更新时间:2023-11-29 09:43:54 28 4
gpt4 key购买 nike

我正在尝试编写一个脚本来告诉您给定目录中有多少个文件和多少个目录。

这是我编写的脚本,但输出始终是“文件数为 .”。和“目录数是。”

这是我的代码:

#!/bin/sh
if [ -d "$@" ]
then
find "$@" -type f | ls -l "$@" | wc -l | echo "Number of files is $@"
find "$@" -type d | ls -l "$@" | wc -l | echo "Number of directories is $@"
fi

最佳答案

您似乎很难理解管道的工作原理。您不能“本地”使用管道(左侧)的“结果”(stdout)作为管道右侧的变量,您需要使用并将其读入变量,例如

printf "line1\nline2\n" | while read line; do_stuff_with "${line}"; done

或者您需要使用命令替换(并可选择将其分配给变量),例如

files=$(find "$1" -maxdepth 1 -type f -printf . | wc -c)

一些进一步的说明:

  • $@ 扩展到所有位置参数,如果有多个参数,您的 [ -d "$@"] 将失败。
  • ls 完全多余
  • find 递归工作,但我猜你只想检查第一个目录级别,所以这需要 maxdepth 参数
  • 这会在带有换行符的奇怪路径上中断,这可以通过告诉 find 为每个找到的目录/文件打印一个字符然后计算字节数而不是行数来解决

如果您真的不希望这是递归的,那么使用 globbing 来获得所需的结果可能会更容易:

$ cat t.sh
#!/bin/bash

for file in "${1-.}"/*; do
[ -d "${file}" ] && ((directories++))
[ -f "${file}" ] && ((files++))
done

echo "Number of files: ${files-0}"
echo "Number of directories: ${directories-0}"

.

$ ./t.sh
Number of files: 6
Number of directories: 1

$ ./t.sh /tmp
Number of files: 9
Number of directories: 3

您可能需要检查 man test 以调整链接以获得您想要的结果。

关于bash - 显示目录中文件和目录数量的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22472417/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com