Re: [問題] 請問 find 排除某些檔案的方式

作者: dododavid006 (朔雪)   2017-06-30 17:08:52
※ 引述《s8454158 (′‧ω‧‵)》之銘言:
: 小弟想要每日刪除在/opt/123/log 內的所有檔案,但是要排除連結指向的檔案...
: 以下是目錄底下的資料:
: /opt/123/log/aaa.ERROR -> ERROR20170622-091436.1204
: /opt/123/log/aaa.WARNING -> ERROR20170622-211432.4204
: /opt/123/log/aaa.INFO -> INFO20170622-221431.1927
: /opt/123/log/bbb.ERROR -> ERROR20170622-091432.1477
: /opt/123/log/bbb.WARNING -> ERROR20170622-111432.8437
: /opt/123/log/bbb.INFO -> INFO20170622-091438.1277
: 其餘還有一大堆類似的檔案,上面六個檔案檔名會變動也不能搬移 = =
: 有方法可以寫 shell script 用 find 排除某些特定檔案一次殺光其他檔案嗎??
: 感恩~
#!/bin/sh
LOG_PATH="/opt/123/log"
# 找出所有的 regular file 並展開成絕對路徑
REGULAR_FILES=$(find "$LOG_PATH"/* -type f -exec realpath \{\} \;)
# 找出所有的 symbol link 並展開成絕對路徑
SYMBOL_LINKS=$(find "$LOG_PATH"/* -type l -exec realpath \{\} \;)
FILES=$(
printf '%s\n%s\n' "$REGULAR_FILES" "$SYMBOL_LINKS" | # 串接兩個檔案列表
sort | # 排序 (uniq 需要排序後的資料)
uniq -u | # 只留下不重覆的行 這邊會排除被連結的檔案
grep "$LOG_PATH" # 排除不在 $LOG_PATH 下的檔案
)
echo "$FILES" # 測試用 印出找出來的檔案
# rm $FILES # 刪除
大概是這樣 不知道有沒有更好的想法
作者: ddtsatan   2017-06-30 19:16:00
作者: pizzahut (...)   2017-07-03 16:05:00
作者: s8454158 (′‧ω‧‵)   2017-07-04 10:43:00
讚!!
作者: newversion (海納百川)   2017-07-04 15:41:00
file含space有無解?
作者: Bencrie   2017-07-12 01:26:00
調 IFS 跟 quote 吧

Links booklink

Contact Us: admin [ a t ] ucptt.com