使用通配符创建文件的符号链接

使用通配符创建文件的符号链接

我想创建多个文件的符号链接:

ln -s dev-*.php 's/dev-(.*\.php)/$1/'

Results hoped for:  
    site.php links to dev-site.php  
    file.php links to dev-file.php

实现这一目标的最简洁的方法是什么?

答案1

好吧,如果它们都在同一个目录中,您可以在 bash 或任何其他 Bourne 风格/POSIX shell 中执行类似的操作:

for FILE in dev-*; do ln -s "$FILE" "${FILE#dev-}"; done

这将创建不带“dev-”的符号链接到以“dev-”开头的文件。

答案2

我通常使用简短的台词。

for file in dev-*.php; do ln -s $file $(echo "$file" | sed 's/^dev-//'); done

这会循环遍历“dev-*.php”文件,获取不带“dev-”的新名称,然后创建符号链接。

答案3

有了zsh,你会这样做:

autoload zmv # typically in ~/.zshrc
zmv -Lsv 'dev-(*.php)' '$1'

使用bash或其他 POSIX shell(包括zsh):

for f in dev-*.php; do
  ln -s "$f" "${f#dev-}"
done

请注意,如果site.php存在并且是一个目录(或目录的符号链接),那么您最终可能会dev-site.php在其中得到一个符号链接。使用 GNU,ln您可以添加-T选项来防止这种情况(zmv使用 use-o -T-T选项传递给ln)。

相关内容