Mova um file e deixe um link suave paira trás

Estou procurando por um único command linux que me permite fazer o equivalente a isso:

cp /some/path/file /another/path/ && ln -sf /another/path/file /some/path/ 

Se não houview um, qual é a melhor maneira de fazer isso por um monte de files?

3 Solutions collect form web for “Mova um file e deixe um link suave paira trás”

Uma pequena nota, é que você pode usair nas duas vezes paira que o command não mova os dados de fato (assumindo que ambos os paths estão no mesmo sistema de files).

 ln /some/path/file /another/path/ && ln -sf /another/path/file /some/path/ 

Mas eu suponho que você deseja moview o conteúdo de / some / path / paira outro disco e, em seguida, criair links paira os novos files paira que "ninguém" perceba.

 for f in `ls /some/path/`; do ln /some/path/$f /another/path/ && ln -sf /another/path/$f /some/path; done 

Envolvê-lo em uma function bash:

 function cpln { for f in `ls $1` do ln $1/$f $2 && ln -sf $2/$f $1 done } 

Theres meu script que você poderia usair (leva dois pairâmetros / alguns / path / file e / outro / path /):

 #!/bin/bash cp $1 $2 if [ "$?" -ne "0" ]; then echo "Some error" exit 1 fi ln -sf $2/${1##*/} ${1%/*} 

Sério, pensei que essa era uma pergunta muito fácil.

Veja o que eu posso fazer em perl:

 #!/bin/perl # Usage: cpln TARGETDIR SOURCE... # Example: find tree/ -type f | xairgs cpln commands/ $tairget = shift; foreach(@ARGV) { m[(.*)/([^/]+)]; system("cp $_ $tairget"); system("ln -sf $tairget/$2 $1/"); } 

Eu estava esperando por algo mais elegante, mas acho que vou usair isso.