Hp-Ux
從特定目錄中刪除一種類型的文件,但不從子目錄中刪除
我目前正在研究 HP-UX,並且有一個每天早上執行的 cron 作業,它根據保留策略刪除超過特定天數的文件。最近,我在刪除文件的路徑中添加了一個子目錄,並希望對該子目錄下的文件有不同的策略。
目前我的命令如下:
find /directory/backup -mtime +1 -name "FileName*.EXT" -exec rm {} \;
當此命令執行時,它會刪除備份目錄下的所有文件以及備份子目錄中的任何匹配文件。我的意思是在備份目錄中有另一個名為 backup_db 的目錄。
pwd /directory/backup/backup_db
我只想限制從備份目錄中刪除,而不是從子目錄中刪除。我怎樣才能做到這一點?非常感謝任何幫助。
我嘗試了man rm但是沒有找到任何可以幫助我的東西。
使用您的命令行,該
find
命令將生成一系列單獨的rm
命令並執行它們。每個rm
命令將刪除一個文件,指定一個完整的路徑名。因此,rm
您需要限制的不是 ,而是find
.由於歷史原因,執行此操作的語法可能有點棘手。你可以這樣做:
find /directory/backup ! -path /directory/backup -prune -mtime +1 -type f -name "FileName*.EXT" -exec rm {}\+
這是限製到單個目錄
find $DIR ! -path $DIR -prune <desired_conditions> [desired_action]
的 POSIX 兼容方式。find
但它仍會列出該特定目錄的子目錄的名稱,除非您添加更多條件。使用
-type f
將限制find
嘗試為rm
備份目錄中的子目錄生成命令,這只會創建無用的錯誤消息:要刪除目錄,您需要遞歸rm
orrmdir
,我知道這是您不想做的事情在這種情況下。
-exec
如果有很多文件要刪除,用加號替換命令規範末尾的分號會提高性能:不是rm
每個文件生成一個命令,而是生成盡可能少的命令,填充盡可能多的路徑名參數在rm
命令行長度允許的情況下添加到每個命令上。這大大減少了對fork()
新工藝的需求。