【发布时间】:2019-09-29 16:19:55
【问题描述】:
我想打印出所有子目录名称及其内容文件名在目录名称下方。如果子目录为空,则不打印目录名称并转到下一个子目录。我的代码的适用部分:
for dirs in "$mydir"/*
do
if [ -d "$dirs" -type f" ] && [ "find "$dirs" -type f" ]
then
echo "Processing directory $dirs"
for subfiles in $dirs/*
do
echo "Encoding $subfiles"
done
fi
done
如果我省略了第一个 if 语句的第二个条件,那么空目录会将它们的名称打印到屏幕上,并且下面会列出一个 *(我想代表目录中没有任何内容的事实)。 && 之后的部分不会导致任何错误,但它不会阻止空目录看到这部分代码的其余部分。
我怎样才能让它工作?
【问题讨论】:
-
@Cyrus 对,我知道如何自己做。我想在一个命令中检查目录中的条目是否实际上是一个目录,以及它是否有一个或多个文件。假设我的主目录包含 /Pictures,其中没有文件和一个名为 file1.txt 的文件。如果我不检查 file1.txt 是否是目录,那么脚本会回显“处理目录 file1.txt”,所以我首先要确定什么是目录,什么不是。那么如果有一个目录,我需要确保它包含文件。否则,我会收到有目录的通知,但屏幕会回显 * 为空。
-
if [[ -d "$dirs" ]] && files=( "$dirs"/* ) && [[ -e ${files[0]} || -L ${files[0]} ]]; then-- 这并不简单,但如果你想要一些可靠且性能良好的东西,那就是你得到的。 -
@CharlesDuffy 如果在
"$dirs"下按字母顺序排列的第一件事是目录,则会失败。 -
他们用于要排除的目录的词非常明确地“空”。包含子目录的目录不为空。
标签: bash if-statement