我想编写一个脚本,该脚本将文件夹的名称作为命令行参数,并生成一个文件,其中包含大小为0的所有子文件夹的名称(空子文件夹)。这就是我得到的:
#!/bin/bash
echo "Name of a folder'
read FOLDER
for entry in "$search_dir"/*
do
echo "$entry"
done
答案 0 :(得分:3)
您的脚本没有您想要的逻辑。 find
命令具有此
$ find path/to/dir -type d -empty
将打印从给定路径/到/ dir
开始的空目录答案 1 :(得分:0)
我建议您接受建议使用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
才能对您的脚本进行微小的更改。