schedule2021-06-21

Linux ディレクトリ内のシンボリックリンクを全件削除するコマンド

ディレクトリ内のシンボリックリンクを全件削除するコマンドです。

シンボリックリンクを消すコマンドにunlinkがあります。 ただし、このコマンドだと引数にファイルパスを渡さないとダメで、$ unlink *とかunlink -r dirのような書き方ができない。

そのため、findでシンボリックリンクを探してrmで消すことになる。

ディレクトリ内のシンボリックリンクを全件削除する

$ find -type l | xargs rm -f

-type lがディレクトリ内のシンボリックを探し、そのリストをrmの引数にして削除してます。rmの-fは確認無しで削除するオプション。

findのオプションやパイプを工夫すれば、条件を変えたりシンボリックに限らずファイルを操作できる。

以下はシンボリックリンクに関する操作の応用。

削除するシンボリックリンクをファイル名で条件付けする

# 拡張子が.datのファイルのシンボリックリンクを削除
$ find -type l -name "*.log" | xargs rm -f

オプションの-nameが大文字と小文字を区別する検索方法で、-inameが大文字と小文字を区別しない検索方法となる。

# NOT
$ find -type l ! -name "*.log" | xargs rm -f

# OR
$ find -type l -name "*.log" -o -name "*.csv" | xargs rm -f

検索するディレクトリの深さを指定する

# 2階層までのディレクトリ内のシンボリックリンクを削除
$ find -type l -maxdepth 2 | xargs rm -f

オプション-maxdepthの数値がディレクトリの階層の数に当たる。

この他はfindのオプションを調べると、色々とシンボリックリンクをまとめて操作できるようになる。

参考