ディレクトリから古いファイルを削除し、最新の3つのファイルのみを残そうとします。
cd /home/user1/test
while [ `ls -lAR | grep ^- | wc -l` < 3 ] ; do
rm `ls -t1 /home/user/test | tail -1`
echo " - - - "
done
条件文に問題があります。
ベストアンサー1
ファイルを繰り返したい場合は、絶対に使用しないでくださいls
*。 tl;dr ほとんどの場合、誤ったファイルを削除したり、すべてのファイルを削除したりします。
残念ながら、これはBashで難しいことです。可能な答えがあります質問が重複しています。 私は年をとるfind_date_sorted
少し変更して使用できます。
counter=0
while IFS= read -r -d '' -u 9
do
let ++counter
if [[ counter -gt 3 ]]
then
path="${REPLY#* }" # Remove the modification time
echo -e "$path" # Test
# rm -v -- "$path" # Uncomment when you're sure it works
fi
done 9< <(find . -mindepth 1 -type f -printf '%TY-%Tm-%TdT%TH:%TM:%TS %p\0' | sort -rz) # Find and sort by date, newest first
*攻撃しようとする意図はありません。ls
以前これを使ったことがあります。しかし、実際には安全ではありません。
編集する:新しいfind_date_sorted
単体テストとして。