有没有办法将符号链接仅设置为 Linux 中的可执行文件?

有没有办法将符号链接仅设置为 Linux 中的可执行文件?

我有一个包含代码文件和可执行文件的目录,我想知道如何仅创建指向该目录中的可执行文件的符号链接?

我知道path-of-directory/*选择所有文件但我只想要可执行文件。

答案1

您可以使用find列出可执行文件:

find /foo -type f -executable 

然后您可以使用该-exec选项来创建链接。

   -exec command ;
          Execute  command;  true  if 0 status is returned.  All following
          arguments to find are taken to be arguments to the command until
          an  argument  consisting of `;' is encountered.  The string `{}'
          is replaced by the current file name being processed  everywhere
          it occurs in the arguments to the command [...]

~/bar因此,要创建指向中的每个可执行文件的链接~/foo,您可以这样做

find ~/foo -type f -executable -exec ln -s {} ~/bar \;

请注意,这不是搜索二进制文件,而只是搜索那些设置了可执行位的文件。

答案2

另一种可能性:

for i in ~/foo/*; do [ -x "$i" ] && ln -s "$i" ~/bar; done

-x测试文件是否存在且可执行。请参阅man test以了解更多信息。

如果您想创建有效的相对链接,您可能需要考虑如何提供目录路径,或者使用选项-rln这是一个较新的 GNU 扩展(≥ 8.16),但应该存在于所有“最近”的发行版中)。

如果您想使用此方法遍历子目录,请使用激活globstarshopt -s globstar提供搜索路径~/foo/**(请参阅globstarBash 手册)。

测试[ -x ]将包括设置了可执行位的目录,这可能是不需要的。如果这是一个问题,[ -f ]可以添加额外的测试来查看匹配项是否是文件。

答案3

如果你使用 zsh(我建议你尝试一下这样的魔法),你可以简单地使用glob 限定符

ln -s /path/to/foo/*(*) /path/to/bar

(*)表示仅可执行文件;您可以对文件、目录、链接等使用类似的构造,甚至进行更高级的排序和操作。

相关内容