Làm thế nào để di chuyển các tập tin để lại symlink phía sau?


9

Làm cách nào tôi có thể di chuyển / sao chép các tập tin từ thư mục này sang thư mục khác, để lại các liên kết tượng trưng trong thư mục gốc . Tôi biết việc ln -stạo các liên kết tượng trưng ở đích, nhưng tôi muốn để các liên kết tượng trưng trong thư mục nguồn và di chuyển các tệp thực tế sang một tệp mới. Tôi có thể làm cái này như thế nào?


Câu trả lời tốt nhất cho câu hỏi này là ở đây: unix.stackexchange.com/a/228166/7000
Sridhar Sarnobat

Câu trả lời:


4

Xử lý các tệp riêng lẻ, ví dụ:

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

hoặc, nếu sao chép, thay thế mvdòng lệnh bằng

    cp ./$i $new_directory/  
    rm ./$i   

1
Phiên bản cp / rm - những lợi ích có thể có của nó là gì? Có vẻ như nó làm như vậy chỉ chậm hơn rất nhiều :)
Sergey

@Sergey Người ta có thể kiểm tra trạng thái thoát của cpvà chỉ tiến hành xóa nếu thành công.
lgarzo

@lgarzo: Điều đó sẽ có giá trị nếu mvkhông kiểm tra xem bản sao có thành công hay không trước khi xóa tệp - nhưng đó sẽ là một lỗi nghiêm trọng trong mv:)
Sergey

Là "$ new_directory" và "<tệp để xử lý>" "biến đặc biệt", trong đó đối số cuối cùng tôi đưa ra tập lệnh sẽ luôn được coi là "$ new_directory" và bất kỳ đối số ban đầu nào được coi là "<tệp để xử lý>"?. Điều này áp dụng cho bất kỳ kịch bản khác tôi viết? Hay bạn đang ám chỉ rằng tôi nên điền vào chỗ trống, như sử dụng "$ 1" và "$ 2"? Xin lỗi vì câu hỏi nhưng tôi rất mới với mã hóa nói chung.
deox

1
Thay thế $original_directory$new_directorybằng các thư mục bạn muốn chuyển từ / đến hoặc đặt chúng như thế này original_directory=/home/walt/from. Để sử dụng trong các kịch bản, bạn phải tự phân tích các đối số. Xem các getopts dựng sẵn trong man bash.
ví von
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.