複数のファイルへのシンボリックリンクを作成したいと思います。
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
追加できます-T
(zmv
オプションを使用して-o -T
オプション-T
に渡すln
)。