我将这些文件放入一个文件夹中:
Enero.01200.2019.txt
Enero.01200.2019.pdf
Enero.01200.2019.png
Febrero.03100.2019.txt
Febrero.03100.2019.pdf
Febrero.03100.2019.png
每个 .txt 文件里面都有一个值表示订单未付款,我需要清除未付款订单的日志文件夹,例如我使用此命令在运行前对 output.sh 进行检查:
find /log/users/ -name '*.txt' | xargs grep -l unpaid | awk '{print "mv "$1" /tmp/ }' >> clearlog.sh
我需要打印例如这个:
mv /log/users/Enero.01200.2019.txt /tmp/ && mv /log/users/Enero.01200.2019.pdf /tmp/ && mv /log/users/Enero.01200.2019.png /tmp/
如果有人有更好的方法来做到这一点,但要求确认或查看会发生什么情况,我会很感激。
大约有 2,500 个文件需要清除,我不会删除错误的文件而造成混乱。
注意:所有 txt 文件都有 PDF 和 PNG 相关文件。我在 ubuntu 20.04 服务器上工作
提前致谢!
答案1
如果所有文件都在一个目录级别中,则建议使用一个简单的 shell 循环,根据grep
退出状态有条件地移动文件,例如
for f in /log/users/*.txt; do
grep -q unpaid "$f" && echo mv -t /tmp/ -- "$f" "${f%.txt}.pdf" "${f%.txt}.png"
done
(echo
一旦您确认它做了正确的事情,就将其删除)。
如果需要使用递归方式下降到父目录find
,那么同样
find /log/users/ -name '*.txt' -exec sh -c '
for f do grep -q unpaid "$f" && echo mv -t /tmp/ -- "$f" "${f%.txt}.pdf" "${f%.txt}.png"; done
' find-sh {} +