[英]Shell script to loop and delete
為此使用find
:
today="$(date +%Y-%m-%d)"
find /path/to/backuptest/Server* -mindepth 1 -maxdepth 1 -type d -not -name "$today" -exec rm -R {} \;
編輯
要不刪除除包含日期結構的目錄以外的目錄,請使用類似
find /path/to/backuptest/Server* -mindepth 1 -maxdepth 1 -type d -regex ".*2016-[0-1]*[0-9]-[0-3][0-9]$" -not -name "$today"
您可以使用find做到這一點:
set date=`date +%Y-%m-%d`
find backuptest -type d -not -name $date -not -name "backuptest" -not -name "Server*" -exec rm -rf {} \;
這個:
find backuptest -type d -not -name $date -not -name "backuptest" -not -name "Server*"
將查找與以下名稱不同的目錄名稱:
backuptest
Server*
$date -> current date
並使用以下命令將其刪除:
rm -rf
您可以通過date
命令以所需的任何格式獲取今天的日期。 例如,
TODAY=$(date +%Y-%m-%d)
您可以使用簡單的通配符匹配來遍歷所需的子文件夾:
for d in /path/to/backuptest/*/*; do
# ...
done
您可以使用basename
命令從文件名中刪除目錄部分:
name=$(basename path/to/file)
您可以將其粘合在一起,如下所示:
#!/bin/bash
TODAY=$(date +%Y-%m-%d)
for d in /path/to/backuptest/*/*; do
test "$(basename "$d")" = "$TODAY" || rm -rf "$d"
done
如果您實際上不希望清除除今天的子文件夾以外的所有子文件夾,而只清除那些與某些特定名稱模式匹配的子文件夾,那么一種完成該方法的方法是將該樣式插入for
命令的glob中。 例如這里
for d in /path/to/backuptest/*/+([0-9])-+([0-9])-+([0-9]); do
test "$(basename "$d")" = "$TODAY" || rm -rf "$d"
done
唯一被考慮刪除的文件/目錄是名稱由三個非空,連字符分隔的十進制數字組成的文件/目錄。 如果願意的話,可以編寫與日期字符串格式更精確匹配的模式,但是如果您希望該模式更具區分性,它的確會變得更加混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.