Downloads フォルダとゴミ箱を定期的に自動削除する(Ubuntu, Mac, Windows)

# はじめに

[ISMS （情報セキュリティマネジメントシステム）](https://ja.wikipedia.org/wiki/%E6%83%85%E5%A0%B1%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0) 対策等で Downloads フォルダとゴミ箱を定期的に自動削除したいことありますよね。
というわけで手順まとめます。

* [Ubuntu](#ubuntu)
* [Mac](#mac)
* [Windows](#windows)

もっとスマートなやり方知ってる方、是非教えてください！

# Ubuntu

## Downloads フォルダ定期自動削除

```bash
$ crontab -e
```

以下の行追記。
削除日時や削除対象ファイルの数字はお好みで調整どうぞです。

```
# 毎月1日12時30分に ~/Downloads フォルダの更新日が60日前のファイルを削除
30 12 1 * * find ~/Downloads -mtime +59 -exec rm -rf {} \;
```

ファイル数確認。
ちゃんと減りましたね！

```bash
$ ls -1 ~/Downloads | wc -l
```

## ゴミ箱定期自動削除

[trash-cli](https://github.com/andreafrancia/trash-cli) インストール

```bash
$ sudo apt install trash-cli
```

```bash
$ crontab -e
```

以下2行追記

```
# 毎月1日12時30分にゴミ箱フォルダの更新日が60日前より古いファイルを削除
30 12 1 * * trash-empty 60
```

ファイル数確認。
ちゃんと減りましたね！

```bash
$ ls -1 ~/.local/share/Trash/files/ | wc -l
```

## おまけ： `crontab -r` で設定消えちゃうの怖い問題

### 対処方法1： `crontab -r` 時確認してくれるようにする

元々 -i 付与で確認してくれるようになる。

```
$ crontab -ir
crontab: really delete <user>'s crontab? (y/n) 
```

`~/.bash_aliases` に追記
＃ `~/.bashrc` でも動く

```bash
$ vi ~/.bash_aliases
```

以下2行追記

```bash:~/.bash_aliases
# crontab -r の削除時に確認させる
alias crontab="crontab -i"
```

```bash
$ source ~/.bash_aliases
```

通常通り `crontab -r` しても確認してくれる！安心！

```
$ crontab -r
crontab: really delete <user>'s crontab? (y/n) 
```


### 対処方法2： crontab -r を封印

`~/.bash_aliases` に追記
＃ `~/.bashrc` でも動く

```bash
$ vi ~/.bash_aliases
```

以下追記

```bash:~/.bash_aliases
# crontab -r を封印する
function crontab() {
  local opt
  for opt in "$@"; do
    if [[ $opt == -r ]]; then
      echo 'crontab -r is sealed!'
      return 1
    fi
  done
  command crontab "$@"
}
```

```bash
$ source ~/.bash_aliases
```

通常通り `crontab -r` してもガードしてくれる！安心！

```bash
$ crontab -r
crontab -r is sealed!
$
```

## 注1

`crontab -e` ではなく、以下の `/etc/cron.d/` に書くパターンは root ユーザー向けなので、一般ユーザーとしては推奨されません。
＃初出時はこれ書いてましたが、、、社内有識者にコメントもらい、 `crontab -e` へ修正。。

```bash
$ cp /etc/crontab /etc/cron.d/test_cron
$ sudo vi /etc/cron.d/test_cron
$ sudo service cron restart
```

## 注2

`~/.bash_aliases` ではなく `~/.bashrc` でも動きますが、
`.bashrc` に「推奨は `~/.bash_aliases` 」な旨記載があります。

```bash:~/.bashrc
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi
```

DeepL さんで翻訳

```
エイリアスの定義。
ここに直接追加するのではなく、~/.bash_aliasesのような別のファイルに追加するとよいでしょう。
bash-doc パッケージの /usr/share/doc/bash-doc/examples を参照してください。
```

# Mac

## Downloads フォルダ定期自動削除

### GUI

Automator 使用。以下そのままどうぞ。

https://jidoca.com/429

### CUI

crontab 使用。

まずは cron のフルディスクアクセス許可。
https://prograshi.com/general/command/crontab-trouble-shooting/


```bash
$ crontab -e
```

以下追記

```
# 毎月1日12時30分に ~/Downloads フォルダの更新日が60日前のファイルを削除
30 12 1 * * find ~/Downloads -mtime +59 -exec rm -rf {} \;
```

ファイル数確認。
ちゃんと減りましたね！

```bash
$ ls -1 ~/Downloads | wc -l
```

## ゴミ箱定期自動削除

https://pc-karuma.net/mac-automatically-deleting-trash

# Windows

## Downloads フォルダ定期自動削除

https://pc-karuma.net/windows-10-auto-delete-download-folder/

## ゴミ箱定期自動削除

https://pc-karuma.net/windows-10-auto-delete-recycle-bin/

# 参考

## Ubuntu

https://www.mk-mode.com/blog/2016/06/06/linux-trash-command/

https://ex1.m-yabe.com/archives/1519

https://qiita.com/kawaz/items/1620300551b5b3f2eccc

https://qiita.com/miriwo/items/0a3bce6bb04aaca6a7a6