Comment déplacer des fichiers en laissant des liens symboliques derrière?

9

Comment puis-je déplacer / copier des fichiers d'un répertoire à un autre, en laissant les liens symboliques dans le répertoire d'origine . Je sais que ln -scrée des liens symboliques dans la destination, mais je veux laisser les liens symboliques dans le répertoire source et déplacer les fichiers réels vers un nouveau. Comment puis-je faire ceci?

deox
la source
La meilleure réponse à cette question est ici: unix.stackexchange.com/a/228166/7000
Sridhar Sarnobat

Réponses:

4

Traitez les fichiers individuellement, par exemple,

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

ou, si vous copiez, remplacez la mvligne de commande par

    cp ./$i $new_directory/  
    rm ./$i   
waltinator
la source
1
La version cp / rm - quels en sont les avantages possibles? On dirait que ça fait la même chose que beaucoup plus lentement :)
Sergey
@Sergey One n'a pu vérifier l'état de sortie de cpet procéder à la suppression que s'il a réussi.
lgarzo
@lgarzo: Cela serait utile si vous mvne vérifiez pas si la copie a réussi avant de supprimer le fichier - mais ce serait un bug sérieux dans mv:)
Sergey
Sont "$ nouveau_répertoire" et "<fichiers à traiter>" "variables spéciales", où le dernier argument que je donne au script sera toujours considéré comme "$ nouveau_répertoire" et quels que soient les arguments initiaux considérés comme "<fichiers à traiter>"?. Est-ce que cela s'applique à tout autre script que j'écris? Ou voulez-vous dire que je devrais remplir les blancs, comme utiliser "$ 1" et "$ 2"? Désolé pour la question, mais je suis très nouveau dans le codage en général.
deox
1
Remplacez $original_directoryet $new_directorypar les répertoires que vous souhaitez déplacer de / vers, ou définissez-les comme ceci original_directory=/home/walt/from. Pour une utilisation dans des scripts, vous devez analyser les arguments vous-même. Voir les getopts builtin dans man bash.
waltinator