※ 引述《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 # 删除
大概是这样 不知道有没有更好的想法