Wie verschiebe ich Dateien und hinterlasse Symlinks?

9

Wie kann ich verschieben / kopieren Sie Dateien von einem Verzeichnis in ein anderes, die Symlinks in der Abgangs ursprünglichen Verzeichnis . Ich weiß, dass die ln -sSymlinks im Ziel erstellt werden, aber ich möchte die Symlinks im Quellverzeichnis belassen und die tatsächlichen Dateien in eine neue verschieben. Wie kann ich das machen?

Desox
quelle
Die beste Antwort auf diese Frage ist hier: unix.stackexchange.com/a/228166/7000
Sridhar Sarnobat

Antworten:

4

Verarbeiten Sie die Dateien einzeln, z.

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

oder ersetzen Sie beim Kopieren die mvBefehlszeile durch

    cp ./$i $new_directory/  
    rm ./$i   
Walzer
quelle
1
Die cp / rm-Version - was sind die möglichen Vorteile davon? Sieht aus wie es das gleiche nur viel langsamer macht :)
Sergey
@Sergey Man konnte den Exit-Status von überprüfen cpund nur dann entfernen, wenn dies erfolgreich war.
Lgarzo
@lgarzo: Das wäre wertvoll, wenn mvnicht geprüft würde, ob das Kopieren erfolgreich war, bevor die Datei gelöscht wurde - aber das wäre ein schwerwiegender Fehler in mv:)
Sergey
Sind "$ new_directory" und "<zu verarbeitende Dateien>" "spezielle Variablen", wobei das letzte Argument, das ich dem Skript gebe, immer als "$ new_directory" betrachtet wird und alle anfänglichen Argumente als "<zu verarbeitende Dateien>" betrachtet werden. Gilt das für jedes andere Skript, das ich schreibe? Oder implizieren Sie, dass ich die Lücken ausfüllen sollte, beispielsweise mit "$ 1" und "$ 2"? Entschuldigung für die Frage, aber ich bin sehr neu in der Codierung im Allgemeinen.
Deox
1
Ersetzen Sie $original_directoryund $new_directorydurch die Verzeichnisse, die Sie von / nach verschieben möchten, oder legen Sie sie so fest original_directory=/home/walt/from. Für die Verwendung in Skripten müssen Sie die Argumente selbst analysieren. Sehen Sie sich die eingebauten Getopts an man bash.
Walzer