我想删除父目录中除 4 个最新目录之外的所有目录。你会如何在 Bash 中做到这一点?
eventi
问问题
622 次
4 回答
9
ls -atrd */ | head --lines=-4 | xargs rm -rf
编辑:向 ls 添加了 'a' 参数
于 2008-09-16T12:55:29.923 回答
1
请澄清您的意思是“删除除四个最新目录之外的所有目录”还是“删除除四个最新目录之外的所有目录(文件和目录)”。
另请注意,目录的创建时间是未知的。只能知道目录最后一次修改的时间,即添加、删除或重命名文件。
于 2008-09-16T12:56:27.050 回答
1
您可以执行以下操作:
#!/bin/bash
#store the listing of current directory in var
mydir=`ls -t`
it=1
for file in $mydir
do
if [ $it -gt 5 ]
then
echo file $it will be deleted: $file
#rm -rf $file
fi
it=$((it+1))
done
(删除 rm 之前的 # 以使其真正发生;))
于 2008-09-16T13:05:21.180 回答
0
另一种 BSD 安全的方法,使用数组(为什么不呢?)
#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
echo ${ARRAY[${COUNTER}]}
let COUNTER=COUNTER+1
done
于 2008-09-16T13:24:35.283 回答