下面是一个Bash脚本的示例,用于删除早于指定日期的文件夹,但跳过新的N个文件夹,并且兼容路径中的特殊字符。
#!/bin/bash
# 设置要删除的日期和保留的文件夹数量
delete_before_date="2021-01-01"
skip_folders=3
# 设置要删除的文件夹的路径
folder_path="/path/to/folders"
# 获取要删除的文件夹列表
folders_to_delete=$(find "$folder_path" -maxdepth 1 -type d -name "folder*" -prune \
| sort -r | tail -n +$((skip_folders+1)))
# 循环遍历要删除的文件夹列表
for folder in $folders_to_delete; do
# 检查文件夹日期是否早于指定日期
folder_date=$(basename "$folder" | sed 's/folder_//')
if [[ $folder_date < $delete_before_date ]]; then
# 删除文件夹
rm -rf "$folder"
echo "Deleted: $folder"
fi
done
请注意,您需要根据实际情况修改脚本中的变量值。请将delete_before_date
设置为您希望删除早于的日期,并将skip_folders
设置为您希望跳过的文件夹数量。将folder_path
设置为要删除文件夹的路径。
这个脚本使用find
命令查找符合条件的文件夹列表,并使用sort
命令和tail
命令来跳过新的N个文件夹。然后,它会循环遍历这些文件夹,并检查它们的日期是否早于指定的日期。如果是,则使用rm -rf
命令删除文件夹。
请确保在运行脚本之前备份重要的文件夹,以防意外删除。