删除除4个最新目录以外的所有文件
答
ls -atrd */ | head --lines=-4 | xargs rm -rf
编辑:加“一”参数LS
答
请说明,如果你的意思是“删除所有目录,但四个newst一”或“删除除四个一切(文件和目录)最新的目录“。
另请注意,目录的创建时间未知。人们只能知道目录是上次修改的时间,也就是说,文件已被添加,删除或重命名。
答
,你可以做到以下几点:
#!/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之前使其真正发生;))
答
另外,BSD安全,办法做到这一点,与阵列(为什么不是?)
#!/bin/bash
ARRAY=(`ls -td */`)
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
echo ${ARRAY[${COUNTER}]}
let COUNTER=COUNTER+1
done
您不能检索文件或目录的创建时间,因为它不存储在任何地方。您可以得到的最接近的是inode更改时间:http://www.faqs.org/faqs/unix-faq/faq/part3/section-1.html并且从目录添加或删除文件会更改inode。 – 2008-09-16 13:20:06
...虽然添加或删除子目录中的文件不会*更改父节点inode。 – 2008-09-16 13:23:09