亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

滿足特定名稱條件的tar和zip文件的最佳方法?

滿足特定名稱條件的tar和zip文件的最佳方法?

慕妹3146593 2021-04-12 14:26:40
我正在Linux計算機上編寫一個Shell腳本,以通過crontab運行該腳本,該腳本旨在將當前日期之前的所有文件移動到新文件夾,然后對整個文件夾進行tar和zip壓縮。似乎是一個簡單的任務,但是由于某種原因,我遇到了各種各樣的障礙。我是新手并且是自學成才的,因此任何幫助或重定向都將不勝感激。歸檔文件的特定標準:所有日志文件都在/home/tech/logs/,所有pdf文件都在/home/tech/logs/pdf如文件名所示,所有文件都已存在一天以上(文件名不包含$CURRENT_DATE)所有文件都必須為*.log或*.pdf(即,$CURRENT_DATE如果不是日志文件或pdf文件,則不要存檔不包含的文件。文件名格式說明:所有日志文件名均home/tech/logs采用格式NAME 00_20180510.log,所有pdf文件均位于“ pdf”子目錄(home/tech/logs/pdf)中,其格式為NAME 00_20180510_00000000.pdf(創建文件時將使用“ 20180510”,而0則可以是任何數字)。我需要使用名稱而不是文件元數據來創建日期,并且其名稱不包括當前日期的所有文件(pdf /日志)均為“舊”。我也不能只移動$CURRENT_DATE名稱中不包含的所有文件,因為它將帶有任何非文件*.pdf或*.log文件?,F在,腳本會為舊文件(mkdir -p /home/tech/logs/$ARCHIVE_NAME/pdf)創建一個帶有新pdf子目錄的新文件夾。然后,我想將舊日志移入$ARCHIVE_NAME,并將所有舊pdf從原始pdf子目錄移至$ARCHIVE_NAME/pdf。當前代碼:find /home/tech/logs -maxdepth 1 -name ( "*[^$CURRENT_DATE].log" "*.log" ) -exec mv -t "$ARCHIVE_NAME" '{}' ';'find /home/tech/logs/pdf -maxdepth 1 -name ( "*[^$CURRENT_DATE]*.pdf" "*.pdf" ) -exec mv -t "$ARCHIVE_NAME/pdf" '{}' ';'這一直沒有奏效,因為它將數字中的數字$CURRENT_DATE視為要排除的數字列表,而不是文字字符串。我考慮過只使用tar這樣的排除選項:tar -cvzPf "$ARCHIVE_NAME.tgz" --directory /home/tech/logs --exclude="$CURRENT_DATE" --no-unquote --recursion --remove-files --files-from="/home/tech/logs/"但是a)它不起作用,b)理論上它將包括所有不是的文件*.pdf或*.log文件,這將是一個問題。我使這個復雜化了嗎?有更好的方法來解決這個問題嗎?
查看完整描述

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" {} +



查看完整回答
反對 回復 2021-04-16
?
慕村9548890

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


查看完整回答
反對 回復 2021-04-16
  • 2 回答
  • 0 關注
  • 285 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號