7日以上のフォルダを削除しますが、常に最新のフォルダを20個保持する方法を探しています。 _SAME_NAME_@tmpに似た名前のフォルダも削除する必要があります。
私はそれが20個のフォルダになるようにし、月が過ぎても削除されないようにしなければならないと主張します。私はまだ入れ子になったwhileループ構文のために苦労しています。よろしくお願いします。
#!/bin/bash
folders=`ls -A /folder/folder1 | sort -n > /tmp/test.txt`
NUMofFolders=`wc -l /tmp/test.txt | awk '{print $1}'`
if [ $NUMofFolders -lt 20 ] ;
then
echo "Only 20 folders exist"
exit 1
else
echo "Runing with the script"
fi
input="/tmp/test.txt"
FolderPATH="/folder/folder1"
count=$(find $Folders -maxdepth 1 -type d -mtime +7 -printf '%Ts\t%P\n' -exec egrep -v "*@tmp" '{}' + | wc -l)
while IFS= read -r line ;
do
while [ "$count" -gt "20" ] ;
do
find /folder/folder1/"$line" -maxdepth 1 -type d -mtime +7 -printf '%Ts\t%P\n' {} \;
do
find $FolderPATH -maxdepth 1 -type d -mtime +7 -print -delete -quit
count=$((--count))
rm -rf $FolderPATH@tmp
done
done < "$input"
ベストアンサー1
stat
以下を使用してディレクトリの実行時間を取得する必要があります。解析されないls
seven_days=$(date -d '7 days ago' '+%s')
stat -c "%Y %%n" /folder/folder1/*/ | sort -nr | tail -n +20 | while read -r mtime name; do
if (( mtime < seven_days )); then
echo "remove directory $name"
fi
done
stat
mtimeとフォルダ名が出力されます。
次に、mtimeに基づいて最新の項目から古い項目までソートします。
その後、最初の20件の結果を無視します。
その後、ループはフォルダのmtimeを1週間前の時間と比較して、それを保持するか削除するかを決定します。
出力で正しいディレクトリを見つけたら、そのecho
行を変更して実際に削除します。