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/shauf Solaris Weg zurück).
${FILE#dev-}ist nicht Bourne, sondern POSIX (wurde von ksh eingeführt, nicht von bash). Sie müssen --für lndas 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 zshSie tun:
autoload zmv # typically in ~/.zshrc
zmv -Lsv 'dev-(*.php)' '$1'
Mit bashoder anderen POSIX-Shells (einschließlich zsh):
for f in dev-*.php; do
ln -s "$f" "${f#dev-}"
done
Beachten Sie, dass, wenn site.phpvorhanden und ein Verzeichnis (oder ein Symlink zu einem Verzeichnis) ist, möglicherweise ein dev-site.phpSymlink darin enthalten ist. Mit GNU lnkönnten Sie die Add - -TOption dagegen zu schützen (mit zmvEinsatz , -o -Tum die Pass - -TOption bis zu ln).