ワイルドカードを使用してファイルへのシンボリックリンクを作成する

ワイルドカードを使用してファイルへのシンボリックリンクを作成する

複数のファイルへのシンボリックリンクを作成したいと思います。

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シェルで次のことを行うことができます。

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シェルを使用する(含むzsh):

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

site.phpそれが存在し、ディレクトリ(またはディレクトリへのシンボリックリンク)である場合は、そのdev-site.php中にシンボリックリンクがある可能性があります。 GNUを使用すると、これを防ぐためのオプションをln追加できます-Tzmvオプションを使用して-o -Tオプション-Tに渡すln)。

関連情報