删除文件夹中的所有符号链接

删除文件夹中的所有符号链接

如何一次性删除文件夹中的所有符号链接(数十个)?使用 unlink 或 rm 时手动插入每个符号链接并不实际。

答案1

您可以使用find-command 来执行此操作:

find /path/to/directory -maxdepth 1 -type l -delete

为了安全起见,请先检查是否不使用 -option -delete

find /path/to/directory -maxdepth 1 -type l

-maxdepth 1确保find只会在 中查找/path/to/directory符号链接,而不会在其子文件夹中查找。请随意查看man find

答案2

列出当前目录别名文件夹中的链接并查看你确实想删除它们,

find -type l -ls                  # search also in subdirectories

find -maxdepth 1 -type l -ls      # search only in the directory itself

如果情况看起来不错,而且你想删除这些链接,运行

find -type l -delete              # delete also in subdirectories

find -maxdepth 1 -type l -delete  # delete only in the directory itself

如果你想交互删除,你可以使用下面的命令行(这个比较安全)

find -type l -exec rm -i {} +              # delete also in subdirectories

find -maxdepth 1 -type l -exec rm -i {} +  # delete only in the directory itself

答案3

对于Z壳rm *(@)将实现这一目标。

Zsh 支持glob 限定符限制 glob(例如)适用的文件类型*,例如(/)目录、(x)可执行文件、(L0)空文件和(@)符号链接。

对于符号链接:

% ll
lrwxrwxrwx 1 test test 3 Aug  8 15:51 bar -> foo
-rw-r--r-- 1 test test 0 Aug  8 15:51 baz
-rw-r--r-- 1 test test 0 Aug  8 15:52 foo
lrwxrwxrwx 1 test test 4 Aug  8 15:51 qux -> /etc/ 

% rm *(@)                                                                         
removed 'bar'
removed 'qux'

% ll                                                                              
-rw-r--r-- 1 test test 0 Aug  8 15:51 baz
-rw-r--r-- 1 test test 0 Aug  8 15:52 foo

答案4

狂欢以及大多数贝壳)…内置命令test并且它的变体[有一个选项-h或者-L更容易记住)将返回成功(exit 0) 如果文件存在并且是符号链接...因此它可以在 shell 循环中像这样使用:

for f in *
    do
    if [ -h "$f" ]
        then 
        echo rm -- "$f"
    fi
done

或者像这样的一行:

for f in *; do if [ -h "$f" ]; then echo rm -- "$f"; fi done

甚至更紧凑(bash 专用……尽管有报道称它可以在zsh 和 ksh以及)像这样:

for f in *; { [ -h "$f" ] && echo rm -- "$f"; }

注意:

echo进行一次试运行...当对输出满意时,删除echo该链接。

相关内容