2017-03-07 127 views
0

我想编写一个脚本,将文件夹的名称作为命令行参数,并生成一个包含大小为0的所有子文件夹(空子文件夹)名称的文件。这是我得到的:生成一个包含所有空子文件夹名称的文件

#!/bin/bash 
echo "Name of a folder' 
read FOLDER 

for entry in "$search_dir"/* 
do 
    echo "$entry" 
done 

回答

0

我会建议你接受其建议使用find,而不是答案。但是为了完整起见,这里有一些关于你的代码的反馈。

  • 您将输入目录读入FOLDER,但从未使用此变量。
  • 另外,不要使用大写字母作为私有变量;这是保留给系统变量的。
  • 您在提示字符串中有不成对的引号。如果开盘报价是双重报价,则需要用双引号关闭,反之亦然。
  • 您可以遍历目录条目,但无法隔离目录条目,更不用说空目录了。
  • 最后,没有在你的脚本中使用bash只设施,所以这将是安全的,有些更便携的使用#!/bin/sh

现在,遍历目录可以通过使用search_dir/*/,而不是仅仅search_dir/*进行;并通过检查目录中的通配符是否仅返回目录本身来确定哪些是空的。 (这是假设默认通配符行为 - 与nullglob你会作出不匹配的通配符扩展到一个空表,但是这是在某些情况下有问题的,所以它不是默认的。)

#!/bin/bash 

# read -p is not POSIX 
read -p "Name of a folder" search_dir 

for dir in "$search_dir"/*/ 
do 
    # [[ is Bash only 
    if [[ "$dir"/* = "$dir/*" ]]; then # Notice tricky quoting 
     echo "$dir" 
    fi 
done 

使用通配符扩展与[是有问题的,因为它不准备处理通配符扩展 - 如果通配符扩展为多个文件名,则会得到“太多的参数” - 所以我使用的是稍微温和的Bash替换[[,这很好。或者,您可以使用case,我实际上更喜欢这里;但我坚持要求if,以便只对脚本进行最小限度的更改。

3

你的脚本没有你想要的逻辑。 find命令有此

$ find path/to/dir -type d -empty 

功能将打印从给定的路径开始空目录/至/ DIR

相关问题