使わないディレクトリを削除する

ファイルが何も格納されていない使用しないディレクトリを削除してみます。

最初に実験ディレクトリ作ります。適当な英単語からディレクトリ名を決めます。

grep -v \' /usr/share/dict/words | sort -R | head -30 | pr -t3J | sed 's/\t/\//g' | xargs mkdir -p

ディレクトリが作れたかfindで確認します。

takk@deb8:~/a$ find
.
./Belushi
./Belushi/re
./Belushi/re/detonate

(省略)

./djinn
./djinn/dulcimer
./djinn/dulcimer/Peruvians
./oxymoron
./oxymoron/venerable
./oxymoron/venerable/vagabonds
takk@deb8:~/a$ 

作成したディレクトリのうち、これまた適当なディレクトリにdummy.txtを保存します。

takk@deb8:~/a$ for i in `find | sort -R | head`;do touch $i/dummy.txt;done
takk@deb8:~/a$ 

どこに格納されたか確認します。

takk@deb8:~/a$ find -name dummy.txt
./Belushi/re/dummy.txt
./Belushi/re/detonate/dummy.txt
./violated/credits/dummy.txt
./novellas/millers/dummy.txt
./novellas/millers/unspecified/dummy.txt
./workforce/dummy.txt
./lacing/Lars/dummy.txt
./intestines/dummy.txt
./djinn/dulcimer/Peruvians/dummy.txt
./oxymoron/venerable/vagabonds/dummy.txt
takk@deb8:~/a$ 

不要ディレクトリを消す前に、どこが消されたかわかるようにコピーを作っておきます。

takk@deb8:~/a$ cp -r . ../b

では不要ディレクトリを消します。

find -type d -empty -delete

中身を見てみます。

takk@deb8:~/a$ tree
.
├── Belushi
│   └── re
│       ├── detonate
│       │   └── dummy.txt
│       └── dummy.txt
├── djinn
│   └── dulcimer
│       └── Peruvians
│           └── dummy.txt
├── intestines
│   └── dummy.txt
├── lacing
│   └── Lars
│       └── dummy.txt
├── novellas
│   └── millers
│       ├── dummy.txt
│       └── unspecified
│           └── dummy.txt
├── oxymoron
│   └── venerable
│       └── vagabonds
│           └── dummy.txt
├── violated
│   └── credits
│       └── dummy.txt
└── workforce
    └── dummy.txt

18 directories, 10 files

ファイルの存在しないディレクトリは完全に消えてますね。
差分も確認してみましょう。

takk@deb8:~/a$ diff -r . ../b
../b のみに存在: dainty
../b のみに存在: hackle
../b/intestines のみに存在: semimonthlies
../b/lacing/Lars のみに存在: weaklings
../b/violated/credits のみに存在: pelagic
../b/workforce のみに存在: triumphing
takk@deb8:~/a$ 

ちなみにいろいろ出ますがこんな消し方もあります。find使っているので意味はないですが。

takk@deb8:~/a$ find -type d | xargs rmdir -p --ignore-fail-on-non-empty
rmdir: `.' を削除できません: 無効な引数です
rmdir: ディレクトリ `.' の削除に失敗しました: 無効な引数です
rmdir: ディレクトリ `.' の削除に失敗しました: 無効な引数です
takk@deb8:~/a$ 

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA