Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用bash识别不在列表中的文件?_Bash_Sh - Fatal编程技术网

如何使用bash识别不在列表中的文件?

如何使用bash识别不在列表中的文件?,bash,sh,Bash,Sh,不幸的是,我对bash的了解不是很好,而且我的任务非常不标准 我有一个文件和文件列表 示例:/tmp/my/file1.txt/tmp/my/file2.txt 如何编写一个脚本来检查文件夹/tmp/my中的文件是否存在,以及脚本完成后是否有两种类型的消息 1-文件存在并显示文件: /tmp/my/file1.txt /tmp/my/file2.txt 2-文件夹/tmp/my包括列表中未列出的文件和文件夹。文件和文件夹: /tmp/my/test /tmp/my/1.txt 你提到的文

不幸的是,我对bash的了解不是很好,而且我的任务非常不标准

我有一个文件和文件列表

示例:
/tmp/my/file1.txt/tmp/my/file2.txt

如何编写一个脚本来检查文件夹
/tmp/my
中的文件是否存在,以及脚本完成后是否有两种类型的消息

1-文件存在并显示文件:

/tmp/my/file1.txt 
/tmp/my/file2.txt
2-文件夹
/tmp/my
包括列表中未列出的文件和文件夹。文件和文件夹:

/tmp/my/test 
/tmp/my/1.txt

你提到的文件和文件夹,似乎不清楚

不管怎么说,我想用数组试试,所以我们开始:

unset valid_paths; declare -a valid_paths
unset invalid_paths; declare -a invalid_paths
while read -r line
do
if [ -e "$line" ]
  then
    valid_paths=("${valid_paths[@]}" "$line")
  else
    invalid_paths=("${invalid_paths[@]}" "$line")
  fi
done < files.txt
echo "VALID PATHS:"; echo "${valid_paths[@]}"
echo "INVALID PATHS:"; echo "${invalid_paths[@]}"
取消设置有效路径;declare-a有效的_路径
取消设置无效的_路径;declare-a无效的_路径
而read-r行
做
如果[-e“$line”]
然后
有效_路径=(“${valid_路径[@]}”“$line”)
其他的
无效的_路径=(“${invalid_路径[@]}”“$line”)
fi
done
您可以检查文件是否存在(假设有一个文件列表,每行一个文件名),并使用此选项打印带有前缀的现有文件

# Part 1 - check list contents for files
while read thefile; do
    if [[ -n "$thefile" ]] && [[ -f "/tmp/my/$thefile" ]]; then
        echo "Y: $thefile"
    else
        echo "N: $thefile"
    fi
done < filelist.txt | sort

# Part 2 - check existing files against list
for filepath in /tmp/my/* ; do
    filename="$(basename "$filepath")"
    grep "$filename" filelist.txt -q || echo "U: $filename"
done

查看更多选项。

这怎么不是一项“标准任务”,您尝试了什么?不确定在什么条件下应该打印什么,或者是否应该打印所有现有和不存在的文件,特别订购或添加前缀。。。你能澄清一下吗?嗨,只存在。它包含foldersOK。很抱歉我可以澄清:只有文件。然后在
测试中使用
-f
而不是
-e
,正如上面taifwa所解释的。您好。我只添加了file1.txt并看到:Y:/tmp/my/file1.txt,但我看不到:N:/tmp/my/file2.txt我只看到:N:N与空行匹配。上面的脚本只检查列表中的名称。更新后的示例还将报告找到的不在列表中的文件。
man test