Crie links simbólicos para arquivos usando curingas

7

Eu quero criar links simbólicos para vários arquivos:

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

Qual é a maneira mais concisa de conseguir isso?

    
por gbentley 11.02.2013 / 21:48

3 respostas

10

Bem, se estiver tudo no mesmo diretório, você poderia fazer algo parecido com isso no bash ou em qualquer outro shell do tipo Bourne / POSIX:

for FILE in dev-*; do ln -s "$FILE" "${FILE#dev-}"; done

que criaria links simbólicos sem "dev-" para arquivos iniciados por "dev -".

    
por 11.02.2013 / 22:11
5

Eu costumo usar um breve one-liner.

for file in dev-*.php; do ln -s $file $(echo "$file" | sed 's/^dev-//'); done

Isto percorre os arquivos 'dev - *. php', obtendo o novo nome sem 'dev-', e então criando o link simbólico.

    
por 11.02.2013 / 22:12
2

Com zsh , você faria:

autoload zmv # typically in ~/.zshrc
zmv -Lsv 'dev-(*.php)' '$1'

Com bash ou outros shells POSIX (incluindo zsh ):

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

Note que se site.php existir e for um diretório (ou um link simbólico para um diretório), você pode acabar com um symlink dev-site.php dentro dele. Com GNU ln , você poderia adicionar a opção -T para protegê-la (com zmv use -o -T para passar a opção -T para ln ).

    
por 11.02.2013 / 23:07