Twitterでそんな処理について見かけたので、調べた内容を残しておく。
GNU findの場合だと、-xtype
, -delete
オプションがあるので、それを利用する。
find ./ -xtype l
find ./ -xtype l -delete
blacknon@test-ubuntu:~/testdir$ ls -al
合計 20
drwxr-xr-x 2 blacknon blacknon 4096 7月 25 10:38 .
drwxr-xr-x 52 blacknon blacknon 4096 7月 24 08:54 ..
-rw-rw-r-- 1 blacknon blacknon 6 5月 5 16:12 test
-rw-r--r-- 1 blacknon blacknon 10 5月 5 16:12 testfile1
lrwxrwxrwx 1 blacknon blacknon 9 7月 25 10:38 testfile1.ln -> testfile1
-rw-r--r-- 1 blacknon blacknon 10 5月 5 16:12 testfile2
lrwxrwxrwx 1 blacknon blacknon 9 7月 25 10:38 testfile2.ln -> testfile2
lrwxrwxrwx 1 blacknon blacknon 9 7月 25 10:38 testfile3.ln -> testfile3
blacknon@test-ubuntu:~/testdir$ find ./ -type l
./testfile2.ln
./testfile3.ln
./testfile1.ln
blacknon@test-ubuntu:~/testdir$ find ./ -xtype l
./testfile3.ln
blacknon@test-ubuntu:~/testdir$ find ./ -xtype l -delete
blacknon@test-ubuntu:~/testdir$ find ./ -type l
./testfile2.ln
./testfile1.ln
blacknon@test-ubuntu:~/testdir$ ls -al
合計 20
drwxr-xr-x 2 blacknon blacknon 4096 7月 25 10:39 .
drwxr-xr-x 52 blacknon blacknon 4096 7月 24 08:54 ..
-rw-rw-r-- 1 blacknon blacknon 6 5月 5 16:12 test
-rw-r--r-- 1 blacknon blacknon 10 5月 5 16:12 testfile1
lrwxrwxrwx 1 blacknon blacknon 9 7月 25 10:38 testfile1.ln -> testfile1
-rw-r--r-- 1 blacknon blacknon 10 5月 5 16:12 testfile2
lrwxrwxrwx 1 blacknon blacknon 9 7月 25 10:38 testfile2.ln -> testfile2
ちなみに、Mac等の場合だとGNU findが入ってないので、以下の様にする必要がある。
find . -type l ! -exec test -e {} \; -print
find . -type l ! -exec test -e {} \; -print | xargs rm