我想删除父目录中除4个最新目录外的所有目录。你会怎么在Bash中做到这一点?
答案 0 :(得分:9)
ls -atrd */ | head --lines=-4 | xargs rm -rf
修改:为ls
添加了'a'参数答案 1 :(得分:1)
请澄清你的意思是“删除除最新的四个目录之外的所有目录”或“删除除四个最新目录之外的所有目录(文件和目录)”。
另请注意,目录不知道创建时间。人们只能告诉上次修改目录的时间,即添加,删除或重命名文件。
答案 2 :(得分: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
(删除#r之前的#以使其真正发生;))
答案 3 :(得分:0)
另一种,BSD安全的方式,使用数组(为什么不呢?)
#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
echo ${ARRAY[${COUNTER}]}
let COUNTER=COUNTER+1
done