如何保留最近修改的最后2个目录及对应符号链接(避免误删)
保留最新目录、符号链接及其指向目录的解决方案
看起来你已经接近目标了,只是之前的命令没考虑到要保护符号链接指向的目录,导致误删了release4,留下了失效的链接。咱们来调整一下逻辑,确保既保留最新的目录,又不会弄丢符号链接和它指向的目标。
问题根源分析
你之前用ls -t1 | tail -n +3 | grep -v Current筛选要删除的目录时,release4因为修改时间较早,被包含在了删除列表里,但它是Current指向的目录,必须保留。所以核心是要把符号链接本身和它指向的目标目录都加入到“保护名单”里,再结合保留最新2个目录的需求。
改进后的Shell脚本
这个脚本会遍历每个app目录,自动识别需要保留的内容,安全删除其余目录:
#!/bin/bash # 定义要处理的应用目录数组 apps=("app1" "app2" "app3" "app4" "app5") base_dir=~/test_dir for app in "${apps[@]}"; do echo "正在处理目录: $app" # 切换到目标目录,失败则跳过 cd "$base_dir/$app" || { echo "无法进入目录 $base_dir/$app,跳过本次处理"; echo ""; continue; } # 检查符号链接Current是否存在 if [ ! -L Current ]; then echo "警告:目录 $app 中未找到符号链接Current,跳过" echo "" continue fi # 获取Current指向的目标目录 target_dir=$(readlink Current) # 验证目标目录是否存在 if [ ! -d "$target_dir" ]; then echo "警告:Current指向的目录 $target_dir 不存在,跳过" echo "" continue fi # 获取所有非符号链接的目录,按修改时间从新到旧排序,取前2个(最新的2个) # ls -dt */ 仅列出目录,按修改时间降序排列;sed去掉目录名末尾的斜杠 latest_dirs=$(ls -dt */ 2>/dev/null | head -n 2 | sed 's/\/$//') # 构建需要保留的目录列表:目标目录 + 最新2个目录 keep_list=("$target_dir") # 将latest_dirs拆分为数组,避免目录名含空格的问题 read -ra latest_arr <<< "$latest_dirs" keep_list+=("${latest_arr[@]}") # 去重(如果目标目录刚好是最新2个之一,避免重复) keep_list=($(printf "%s\n" "${keep_list[@]}" | sort -u)) # 筛选需要删除的目录:非符号链接目录,且不在保留列表中 delete_list=() for dir in */; do dir_name=${dir%/} # 跳过符号链接(ls -dt */默认不会列出,但保险起见) if [ -L "$dir_name" ]; then continue fi # 检查当前目录是否在保留列表内 if ! printf "%s\n" "${keep_list[@]}" | grep -q "^$dir_name$"; then delete_list+=("$dir_name") fi done # 执行删除操作 if [ ${#delete_list[@]} -eq 0 ]; then echo "没有需要删除的目录" else echo "即将删除以下目录:${delete_list[*]}" rm -r "${delete_list[@]}" echo "成功删除 ${#delete_list[@]} 个目录" fi echo "" done
脚本关键逻辑说明
- 符号链接校验:先检查
Current是否存在,再获取它指向的目录并验证有效性,避免处理无效链接。 - 最新目录筛选:用
ls -dt */只列出真实目录(排除符号链接和文件),按修改时间从新到旧排序,取前2个就是最新的目录。 - 保留名单构建:把符号链接指向的目录和最新2个目录合并,去重后得到完整的保护名单。
- 安全删除:遍历所有目录,只删除不在保护名单里的内容,完全避免误删需要保留的目录和符号链接。
调整说明
如果你的需求是“保留符号链接+它指向的目录+总共2个目录”(而不是额外加2个),只需要把head -n 2改成head -n 1,这样最终保留的就是目标目录+1个最新目录+符号链接,和你期望的结果一致。
内容的提问来源于stack exchange,提问作者user8895496
相关产品推荐
相关产品推荐

