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 關注
- 285 瀏覽
添加回答
舉報