检查目录中的特定文件

检查目录中的特定文件

我想检查作为参数传递给脚本的父目录列表中存在的目录 1 8 和 4。 PFB 我的脚本

#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do

cd $line
echo "checking in $line" >> ../filesearch.log

if [ [ -d 1]  &&  [ -d 8]  &&  [ -d 4] ]; then
echo "1 8 4 exists" >> ../filesearch.log
else
    echo "Dir 1 8 4 does not exist" >> ../filesearch.log
fi
cd ../

done < "$1"

当我使用 if [ [ -d 1] && [ -d 8] && [ -d 4] ]; 时出现以下错误

 ./fs.sh: line 8: [: -d: binary operator expected

如果我们使用 [[ -d 1 ]];而不是 if [ [ -d 1] && [ -d 8] && [ -d 4] ];我的代码工作正常,但我的要求是检查父目录中是否存在上述所有文件(1 4 8)。

答案1

这里的根本问题是您假设这[只是同一类型的括号,并且您可以嵌套它们。那不是真的。表达方式[ ... ]与 相同test ...

test实用程序可以将多个测试与-aforand-ofor结合起来or。详细信息请参阅手册。

所以您可以将支票写为test -d 1 -a d 4 -a -d 8[ -d 1 -a d 4 -a -d 8 ]

答案2

像这样做if [ -d 1 ] && [ -d 8 ] && [ -d 4 ]

编辑:忽略,下面的答案是正确的。

答案3

尝试这个,

if [[ -d 1 && -d 8 && -d 4 ]];

相关内容