如何删除名称最大的目录?

时间:2014-10-09 16:45:05

标签: linux bash

我有一个包含子目录的目录,其中一些名称是数字。没有看,我不知道数字是什么。如何删除名称最大的子目录?我认为解决方案可能会将子目录排序为相反的顺序,并选择以数字开头的第一个子目录,但我不知道如何做到这一点。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

 cd $yourdir             #go to that dir
 ls -q -p     |             #list all files directly in dir and make directories end with /
 grep '^[0-9]*/$' |      #select directories (end with /) whose names are made of numbers
 sort -n |               #sort numerically
 tail -n1 |              #select the last one (largest)
 xargs -r rmdir          #or rm -r if nonempty 

建议在没有xargs -r rmdirxargs -r rm -r部分的情况下首先运行它,以确保删除正确的内容。

答案 1 :(得分:1)

纯粹的Bash解决方案:

#!/bin/bash

shopt -s nullglob extglob

# Make an array of all the dir names that only contain digits
dirs=( +([[:digit:]])/ )

# If none found, exit
if ((${#dirs[@]}==0)); then
    echo >&2 "No dirs found"
    exit
fi

# Loop through all elements of array dirs, saving the greatest number
max=${dirs[0]%/}
for i in "${dirs[@]%/}"; do
    ((10#$max<10#$i)) && max=$i
done

# Finally, delete the dir with largest number found
echo rm -r "$max"

注意:

  • 如果dirs具有相同的编号但编写方式不同,例如20002,则会产生不可预测的行为。
  • 如果数字超出Bash的数字,则会失败。
  • 不考虑负数和非整数。
  • 如果您对此感到满意,请移除最后一行中的echo
  • 从您的目录中运行。

答案 2 :(得分:0)

让我们制作一些目录来测试脚本:

mkdir test; cd test; mkdir $(seq 100)

现在

find -mindepth 1 -maxdepth 1 -type d | cut -c 3- | sort -k1n | tail -n 1 | xargs -r echo rm -r

结果:

rm -r 100

现在,从命令中删除echo一词,xargs将执行rm -r 100