我有一个 shell 脚本,允许用户添加和/或删除文件和目录。这是一个文件操纵器。该脚本跟踪日志文件中添加或删除的所有文件。然后,我逐行读取日志文件并将文件放在 3 个文件之一中:dev_deleted.txt、dev_duplicates.txt 或 dev_final.txt。
- 如果用户将相同的文件添加到目录两次(重复),则文件或目录应列在 dev_duplicates.txt 文件中。
- 任何被删除的文件/目录都应该在 dev_deleted.txt 中列出
所有其他文件应列在 dev_final.txt 中,包括文件名、第一个和最后一个字符以及文件的长度
正如您在下面的代码中所看到的,我阅读了日志文件中的每一行以搜索正确的后缀,删除后缀,并在 dev_deleted.txt、dev_duplicates.txt 或 dev_final.txt 中列出
dev_deleted.txt 可以正常工作,但 dev_duplicates.txt 和 dev_final.txt 没有列出正确的文件。我在我的 Mac 上运行没有问题,但现在我尝试在 Windows 10 操作系统上运行(我将 EOL 转换为 UNIX),最后一个案例给我带来了问题。有人可以帮忙吗?
我试过搜索语法错误
6)
echo "List filesystem directory artifacts"
touch $basedir/dev_final.txt $basedir/dev_deleted.txt $basedir/dev_duplicates.txt
while IFS= read -r line
do
#echo "$line"
if [[ $line == *"-removed" ]]; then
fileName=${line%-*}
echo "$fileName" >> $basedir/dev_deleted.txt
elif [[ $line == *"-new" ]]; then
fileName=${line%-*}
echo "$fileName" >> $basedir/dev_duplicates.txt
else
fileName=${line}
first=${fileName:0:1}
nameLength=${#fileName}
last=${fileName:$nameLength-1}
echo "$fileName, first char:$first, last char:$last, length:$nameLength" >> $basedir/dev_final.txt
fi
done < "$logFile"
;;
esac
done
带有 -new 后缀的文件应在 dev_duplicates.txt 中列出,带有 -removed 后缀的文件应在 dev_deleted.txt 中列出,所有其他文件(未删除或重复)应在 dev_final.txt 中列出,包括文件名,第一个和最后一个字符,以及文件的长度