請問 find 排除某些檔案的方式 - Linux

Skylar DavisLinda avatar
By Skylar DavisLinda
at 2017-06-30T17:08

Table of Contents

※ 引述《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 # 刪除

大概是這樣 不知道有沒有更好的想法

--
Tags: Linux

All Comments

David avatar
By David
at 2017-07-01T15:07
Sandy avatar
By Sandy
at 2017-07-04T00:19
Zenobia avatar
By Zenobia
at 2017-07-06T10:51
讚!!
Lauren avatar
By Lauren
at 2017-07-07T12:10
file含space有無解?
Connor avatar
By Connor
at 2017-07-09T20:01
調 IFS 跟 quote 吧

請問 find 排除某些檔案的方式

Donna avatar
By Donna
at 2017-06-30T02:59
小弟想要每日刪除在/opt/123/log 內的所有檔案,但是要排除連結指向的檔案... 以下是目錄底下的資料: /opt/123/log/aaa.ERROR -andgt; ERROR20170622-091436.1204 /opt/123/log/aaa.WARNING -andgt; ERROR2 ...

mac terminal 2>&1 導向的問題

Donna avatar
By Donna
at 2017-06-29T16:30
想請教一下我在 macOS 用 terminal ssh linux server 和 win7 putty ssh linux server 下相同的指令 java -jar xxx.war --spring.profiles.active=dev andgt; /dev/null 2andgt;an ...

使用Gnome-terminal,如何儲存記錄檔?

Catherine avatar
By Catherine
at 2017-06-28T14:51
Hi 各位Linux高手 小弟最近在使用linux上,遇到的一個困難, 就是我在使用iperf的程式時, 我透過gnome-terminal的方式, 開新視窗跑資料,但是資料一直在流, 想要把流過的資料都儲存下來, 我應該用什麼方法儲存這些資料? 我下的command如下 rootat~: gnome-ter ...

CentOS(1611)安裝時GPT設定

Christine avatar
By Christine
at 2017-06-28T10:20
請問版上大大, 我想要拿4TB x 2做 CentOS(1611)系統碟, 但發現安裝介面無法辨識到4TB硬碟。 爬文之後得知需要在安裝頁面輸入Tab, 並加入強制使用 GPT 分割表的安裝參數如下: vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=Ce ...

hwclock設定時間

Kama avatar
By Kama
at 2017-06-28T09:01
如果CMOS Battery沒有電的話 預設時間會是19xx年 如果進去Linux透過NTP或是hwclock設定時間 譬如說設定2017 會發現系統時間是對的 但是bios時間卻變成1917 做幾次測試發現linux還真的只會sync 2017年中的17回hardware clock (RTC) 前面的2 ...