Antworten:
Wenn sich alles im selben Verzeichnis befindet, können Sie so etwas in bash oder einer anderen Bourne-ähnlichen / POSIX-Shell ausführen:
for FILE in dev-*; do ln -s "$FILE" "${FILE#dev-}"; done
Dies würde Symlinks ohne "dev-" zu Dateien erstellen, die mit "dev-" beginnen.
${FILE#dev-}
Ich muss mich nur um Dateinamen mit lustigen Charakteren kümmern ... und das ist ein Bashishm, AFAIU (definitiv nicht /bin/sh
auf Solaris Weg zurück).
${FILE#dev-}
ist nicht Bourne, sondern POSIX (wurde von ksh eingeführt, nicht von bash). Sie müssen --
für ln
das Ende der Optionen für ein markieren *
Muster, oder besser gesagt, ein verwenden dev-*
Muster. Der Code, wie er ist, würde in jedem Unterverzeichnis des aktuellen Verzeichnisses, mit dessen Namen nicht beginnt, Symlinks zu sich selbst erstellen dev-
. Siehe auch die Hinweise in meiner Antwort.
dev-*
statt *
hier wie vorgesehen funktioniert - da der Code darüber steht, wird versucht, Symlinks für jede Datei zu erstellen .
Mit würden zsh
Sie tun:
autoload zmv # typically in ~/.zshrc
zmv -Lsv 'dev-(*.php)' '$1'
Mit bash
oder anderen POSIX-Shells (einschließlich zsh
):
for f in dev-*.php; do
ln -s "$f" "${f#dev-}"
done
Beachten Sie, dass, wenn site.php
vorhanden und ein Verzeichnis (oder ein Symlink zu einem Verzeichnis) ist, möglicherweise ein dev-site.php
Symlink darin enthalten ist. Mit GNU ln
könnten Sie die Add - -T
Option dagegen zu schützen (mit zmv
Einsatz , -o -T
um die Pass - -T
Option bis zu ln
).