如何使用bash识别不在列表中的文件?
不幸的是,我对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 你提到的文
/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