删除除4个最新目录以外的所有文件

问题描述:

我想删除除父目录中最新4个目录以外的所有目录。你如何在Bash中做到这一点?删除除4个最新目录以外的所有文件

+0

您不能检索文件或目录的创建时间,因为它不存储在任何地方。您可以得到的最接近的是inode更改时间:http://www.faqs.org/faqs/unix-faq/faq/part3/section-1.html并且从目录添加或删除文件会更改inode。 – 2008-09-16 13:20:06

+0

...虽然添加或删除子目录中的文件不会*更改父节点inode。 – 2008-09-16 13:23:09

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