我有一个包含子目录的目录,其中一些名称是数字。没有看,我不知道数字是什么。如何删除名称最大的子目录?我认为解决方案可能会将子目录排序为相反的顺序,并选择以数字开头的第一个子目录,但我不知道如何做到这一点。谢谢你的帮助。
答案 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 rmdir
或xargs -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"
注意:
2
和0002
,则会产生不可预测的行为。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
。