我想编写一个脚本,将文件夹的名称作为命令行参数,并生成一个包含大小为0的所有子文件夹(空子文件夹)名称的文件。这是我得到的:生成一个包含所有空子文件夹名称的文件
#!/bin/bash
echo "Name of a folder'
read FOLDER
for entry in "$search_dir"/*
do
echo "$entry"
done
我想编写一个脚本,将文件夹的名称作为命令行参数,并生成一个包含大小为0的所有子文件夹(空子文件夹)名称的文件。这是我得到的:生成一个包含所有空子文件夹名称的文件
#!/bin/bash
echo "Name of a folder'
read FOLDER
for entry in "$search_dir"/*
do
echo "$entry"
done
我会建议你接受其建议使用find
,而不是答案。但是为了完整起见,这里有一些关于你的代码的反馈。
FOLDER
,但从未使用此变量。#!/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
,以便只对脚本进行最小限度的更改。
你的脚本没有你想要的逻辑。 find
命令有此
$ find path/to/dir -type d -empty
功能将打印从给定的路径开始空目录/至/ DIR