Como mover arquivos deixando links simbólicos para trás?

9

Como posso mover / copiar arquivos de um diretório para outro, deixando os links simbólicos no diretório original . Sei que ln -scria links simbólicos no destino, mas quero deixar os links simbólicos no diretório de origem e mover os arquivos reais para um novo. Como posso fazer isso?

desox
fonte
A melhor resposta para esta pergunta está aqui: unix.stackexchange.com/a/228166/7000
Sridhar Sarnobat

Respostas:

4

Processe os arquivos individualmente, por exemplo,

cd $original_directory  
for i in <files to process> ; do  
    mv ./$i $new_directory/  
    ln -s $new_directory/$i ./$i
done

ou, se estiver copiando, substitua a mvlinha de comando por

    cp ./$i $new_directory/  
    rm ./$i   
waltinator
fonte
1
A versão cp / rm - quais são os possíveis benefícios dela? Parece que ele faz o mesmo só que muito mais lento :)
Sergey
O @Sergey One pode verificar o status de saída cpe prosseguir para remover somente se tiver êxito.
Lgarzo
@ lgarzo: Isso seria valioso se mvnão estivesse verificando se a cópia foi bem-sucedida antes de excluir o arquivo - mas isso seria um bug sério mv:):
Sergey
São "$ new_directory" e "<arquivos para processar>" "variáveis ​​especiais", onde o último argumento que forneço ao script sempre será considerado "$ new_directory" e quaisquer argumentos iniciais são considerados "<arquivos para processar>" ?. Isso se aplica a qualquer outro script que eu escrevo? Ou você está sugerindo que eu preencha os espaços em branco, como usar "$ 1" e "$ 2"? Desculpe a pergunta, mas eu sou muito novo em codificação em geral.
Deox
1
Substitua $original_directorye $new_directorypelos diretórios que você deseja mover de / para ou defina-os assim original_directory=/home/walt/from. Para uso em scripts, você deve analisar os argumentos por conta própria. Veja as getopts embutido no man bash.
waltinator