2 回答
TA贡献1942条经验 获得超3个赞
我将使用bash的扩展glob功能来解决此问题,该功能使您可以否定模式:
#!/bin/bash
shopt -s extglob
mv /home/tech/logs/*!("$CURRENT_DATE")*.log "$ARCHIVE_NAME"
mv /home/tech/logs/pdf/*!("$CURRENT_DATE")*.pdf "$ARCHIVE_NAME"/pdf
与extglob启用,!(pattern)扩展到不匹配的模式(或竖线分隔模式列表)的一切。
find也应该可以使用它:
find /home/tech/logs -name '*.log' -not -name "*$CURRENT_DATE*" -exec mv -t "$ARCHIVE_NAME" {} +
TA贡献1884条经验 获得超4个赞
在@ tom-fenech答案的基础上进行了优化,可以避免多次mv调用:
find /home/tech/logs -maxdepth 1 -name '*.log' -not -name "*_${CURRENT_DATE?}.log" | \
xargs mv -t "${ARCHIVE_NAME?}"
通过处理管道的文件,一个有趣的功能是可以使用额外的工具(也称为grep :)对其进行过滤,这可以(可以说)变得更具可读性,即->
find /home/tech/logs -maxdepth 1 -name '*.log' | fgrep -v "_${CURRENT_DATE?}" | \
xargs mv -t "${ARCHIVE_NAME?}"
然后类似地pdf,顺便说一句,您可以通过替换为来“空运行”上面mv的内容echo mv。
--jjo
- 2 回答
- 0 关注
- 257 浏览
添加回答
举报