ディレクトリ内のシンボリックリンクを全件削除するコマンドです。
シンボリックリンクを消すコマンドに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のオプションを調べると、色々とシンボリックリンクをまとめて操作できるようになる。