如何在命令的不同部分使用相同的通配符?

如何在命令的不同部分使用相同的通配符?

假设我有以下命令,它创建从一个文件到另一个文件的符号链接,并为该链接赋予相同的名称但不带扩展名。

sudo ln -s ~/foobar/abc.sh ~/fubar/abc

我怎样才能做同样的事情,但是~/foobar/*.sh

答案1

重命名文件,并且在您的情况下创建符号链接mmv就足够了。

mmv -s '~/foobar/*.sh' '~/fubar/#1'
  • -s要使生成的链接指向源,源名称必须以“/”开头,或者目标必须位于当前目录或源目录中。如果这些条件都不满足,则链接会被拒绝。但是,源和目标可以位于不同的设备上,并且源可以是目录。

答案2

for fn in ~/foobar/*.sh ; do
sudo ln -s $fn ~/fubar/`basename $fn .sh`
done

这假设所有*.sh文件的文件名都没有空格。如果有,则需要用ln -s引号将两个参数括起来:

for fn in ~/foobar/*.sh ; do
sudo ln -s "$fn" "~/fubar/`basename $fn .sh`"
done

相关内容