スクリプトの書き方が気になります。
ディレクトリ内のファイル数を数えます。
この数値が指定された数値 N より大きい場合、ディレクトリ内の最も古いファイルは削除されます。
追加の好意を得るには、カウント/削除に.zipファイルのみを含めてください。
答え1
たとえば、フォルダに50を超えるファイルがある場合にのみ作業を実行するには、次の手順を実行します。
shopt -s dotglob nullglob
for file in *; do
[[ -f $file ]] && files+=( "$file" )
done
if (( ${#files[@]} > 50 )); then
IFS= read -r -d $'\0' line < <(find . -maxdepth 1 -type f -printf '%T@ %p\0' 2>/dev/null | sort -z -n)
rm "${line#* }"
fi
答え2
N=50
[[ $( ls | wc -l ) -gt $N ]] && ls -tr | tail -n1 | tr \\n \\0 | xargs -0 echo rm
ほとんどテストされていませんが、これが近いと思います。テキスト出力がうまくいけば、それを削除してecho
有効にすることができます。
ls
ファイルのリストwc
数えてみてください[[ ... -gt ... ]]
もし&&
それからls -tr
年齢逆順でファイルを一覧表示tail -n1
最後の行のみを表示(1
必要に応じて交換)tr \\n \\0
ファイル名の間に\0
区切り記号を設定する(ここでは1つのみ)xargs -0 echo rm --
\0
見つかった各引数(sで区切られた)を次に追加します。echo rm --
echo rm --
結果が実際に望ましい結果であることを確認する機会を提供するrm --
ファイルの削除(--
で始まるファイル名を処理するには、ファイル名の前に置く-
)