gpt4 book ai didi

linux - 无法将正确的文件移动到 mvfiles

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:20 25 4
gpt4 key购买 nike

我正在尝试对多个文件中的分隔符(逗号、竖线或分号)进行 grep。

如果文件包含这些定界符中的任何一个,则没有问题。我想将不包含任何这些定界符的文件移动到 mvfiles 目录。该脚本当前正在移动所有文件,即使文件中存在分隔符也是如此。

filename=$(find /opt/interfaces/sample_check -type f \( -name "*message.txt*" -or -name "*comma2*" -or -name "*comma3*" \))
pathname=/opt/interfaces/sample_check

echo $filename
echo $pathname

if `head -1 $filename | grep -o [';']`; then

echo "Found"
else
mv $filename /opt/interfaces/sample_check/mvfiles
fi

最佳答案

尝试稍微调整一下您的逻辑。此外,在 grep 模式中包含所有定界符,并调整引号的位置。

pathname=/opt/interfaces/sample_check
find "$pathname" -type f \( -name "*message.txt*" -or -name "*comma[23]*" \) |
while read -r filename
do if sed -n '1d; 2{ /[,;|]/q0 }; q1' "$filename"
then echo "Delimited: $filename"
else echo "Moving ==>> $filename"
mv "$filename" /opt/interfaces/sample_check/mvfiles/
fi
done

因为我们只想根据文件第 2 行中的分隔符来决定,所以让我们改用 sed

sed -n '1d; 2{/[,;|]/q0 }; q1' 

sed -n 表示除非请求,否则不打印任何内容 - 我们不需要任何输出。

1d 删除第一行(我们没有编辑,只是放弃对该行的任何进一步处理,因此它会跳过程序的其余部分。)

2{...} 表示仅在第 2 行执行这些命令。/[,;|]/q0 表示该行是否有任何逗号、分号、或管道,然后使用 zeo 退出代码退出以指示成功。

q1 表示如果到达此处,退出代码为 1。

这些触发了 if 的分支。 :)

关于linux - 无法将正确的文件移动到 mvfiles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53707479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com