Jak przenosić pliki, pozostawiając dowiązania symboliczne?

9

Jak mogę przenosić / kopiować pliki z jednego katalogu do drugiego, pozostawiając dowiązania symboliczne w oryginalnym katalogu . Wiem, że ln -stworzy dowiązania symboliczne w miejscu docelowym, ale chcę zostawić dowiązania symboliczne w katalogu źródłowym i przenieść rzeczywiste pliki do nowego. W jaki sposób mogę to zrobić?

deoks
źródło
Najlepsza odpowiedź na to pytanie znajduje się tutaj: unix.stackexchange.com/a/228166/7000
Sridhar Sarnobat

Odpowiedzi:

4

Przetwarzaj pliki indywidualnie, np.

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

lub, jeśli kopiujesz, zamień mvwiersz poleceń na

    cp ./$i $new_directory/  
    rm ./$i   
waltinator
źródło
1
Wersja CP / RM - jakie są możliwe korzyści? Wygląda na to, że robi to samo tylko znacznie wolniej :)
Sergey
@Sergey Można sprawdzić status wyjścia cpi kontynuować usuwanie tylko wtedy, gdy się powiedzie.
lgarzo
@lgarzo: Byłoby to cenne, gdyby mvnie sprawdzanie, czy kopiowanie się powiodło przed usunięciem pliku - ale to byłby poważny błąd w mv:)
Sergey
Czy „$ new_directory” i „<pliki do przetworzenia>” „zmienne specjalne”, gdzie ostatni argument, który podam skryptowi, będzie zawsze uważany za „$ new_directory”, a wszelkie początkowe argumenty za „<pliki do przetworzenia>” ?. Czy dotyczy to każdego innego skryptu, który piszę? A może sugerujesz, że powinienem wypełnić puste pola, na przykład używając „1 $” i „2 $”? Przepraszam za pytanie, ale ogólnie jestem nowy w programowaniu.
deox
1
Zastąp $original_directoryi $new_directorykatalogami, które chcesz przenieść z / do, lub ustaw je w ten sposób original_directory=/home/walt/from. Aby użyć w skryptach, musisz sam przeanalizować argumenty. Zobacz getopts wbudowane w man bash.
waltinator