如何检查文件夹是否为空并在 if-then-else-statement 中使用其内容?

kun*_*nal 2 command-line bash scripts

我需要检查文件夹是否为空,并根据输出我需要运行一些其他命令。我正在使用 Ubuntu 18.04.5 LTS。

我的 bash 脚本:

if [ "$(ls -A /mnt/mamdrive/"As Metadata"/)" ] || ["$(ls -A /mnt/mamdrive/"As Video"/)"  ]; then
    echo "copy file"
else
    echo "dont copy"
fi
Run Code Online (Sandbox Code Playgroud)

这种情况有时有效,但有时不起作用,而且很难重现。有没有其他方法可以检查目录是否为空并相应地执行一些操作?

ste*_*ver 13

我建议一些不依赖于字符串输出的东西ls- 例如,测试是否有 glob 扩展的任何结果:

#!/bin/bash

shopt -s nullglob       # don't return literal glob if matching fails
shopt -s dotglob        # make * match "almost all" like ls -A

set -- /mnt/mamdrive/"As Metadata"/*

if (( $# > 0 )); then
  echo "not empty"
else
  echo "empty"
fi
Run Code Online (Sandbox Code Playgroud)

如果你想测试两个目录是否都是空的,你可以简单地 glob 两个:

set -- /mnt/mamdrive/"As Metadata"/* /mnt/mamdrive/"As Video"/*
Run Code Online (Sandbox Code Playgroud)


Sto*_*ord 6

最简单的方法是ls -A在这样的if语句中使用:

path=$(ls -A '/whatever/sub directory/more spaces')
if [[ ! -z "$path" ]]; then
    echo "Directory is NOT empty!"
else
    echo "Directory is empty!"
fi
Run Code Online (Sandbox Code Playgroud)