我想创建多个文件的符号链接:
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
)。