find コマンドでとあるディレクトリ内の空のディレクトリを削除したいということがあったのでコマンドを実行
$ find /home/user/find_dir -depth -type d -empty -exec rmdir {} + -print
オプション
-depth : 階層の深いディレクトリから検索、ディレクトリ内のファイルを先に処理
-type d : ディレクトリを対象
-empty : 空ディレクトリを対象
-exec rmdir {} + : 検索結果に対してコマンドを実行
-print : 検索結果を表示
このコマンドで空のフォルダを削除できるようになったわけだが、
ある時、ディレクトリ内が空になった時
カレントとするディレクトリも削除されてしまうことに。
ここでいうカレントディレクトリとは、findで指定している/home/user/find_dirのことです。
どうやら、カレントディレクトリも空ディレクトリとして判断されてしまうよう。
さて、どうしたものかと調べてみると。
mindepthオプションを追加すれば良いみたい。
$ find /home/user/find_dir -depth -type d -mindepth 1 -empty -exec rmdir {} + -print
実行すると
何やらエラーが。
find: warning: you have specified the global option -mindepth after the argument -type, but global options are not positional, i.e., -mindepth affects tests specified before it as well as those specified after it. Please specify global options before other arguments.
find: 警告: 引数 -type の後にグローバル オプション -min Depth を指定しましたが、グローバル オプションは位置を指定しません。つまり、-min Depth は、その前に指定されたテストとその後に指定されたテストに影響します。他の引数の前にグローバル オプションを指定してください。
どうやらオプションの順番があるようです。
グローバルオプションはオプションの場所に関わらず、全体に影響があるオプションのこと。今回の場合は、グローバルオプションのmindepthがtypeの前に来るべきということ。
ということで、オプションの順番を調整して
$ find /home/user/find_dir -depth -mindepth 1 -type d -empty -exec rmdir {} + -print
この順番でエラーもなく処理が実行できました。