tập tin bó để sao chép tập tin giữ bản gốc trong thư mục khác


1

Ví dụ tôi có thư mục:

F1\F11\some files...
F1\F12\some files...
F1\F12\F121\some files..

Và tôi có một cấu trúc khác

F2\F21\some files...
F2\F22\some files...
F2\F22\folder\some files...

tên các thư mục F11- F21, F12F22đều bình đẳng.

Trong thư mục F21, F22có những file ít hơn trong F11, F12.

Tôi cần sao chép F2để F1đệ quy, nhưng các tệp sẽ được thay thế - nên được lưu trong thư mục sao lưu:

Fbackup\F11\those files..
Fbackup\F12\those files..

Điều này là cần thiết để có thể thực hiện hành động "hoàn tác" bản sao đó. Ví dụ tôi đã sao chép F2trong F1đệ quy, hơn tôi sao chép FBackup đến F1và tôi phải gốc F1.


Bạn có cần một giải pháp mà sử dụng này .cmd? Với shell Unix, tôi có thể thực hiện trong 5 dòng nhưng tôi không chắc là có thể chấp nhận được.
Nicole Hamilton

@Nicole Hamilton, tôi chỉ cần điều này trong Windows. Nhưng, tôi chỉ tò mò - thực sự tôi là một người dùng linux - nó sẽ như thế nào trong bash?
Larry Cinnabar

Có vẻ như ai đó đã hạ cấp nó (ai biết tại sao) nhưng tôi đã đưa cho bạn một vài lựa chọn thay thế bên dưới trong C shell và bash. Hi vọng điêu nay co ich.
Nicole Hamilton

Câu trả lời:


0

Nếu bạn đang mở để sử dụng shell Unix, đây là một vài lựa chọn thay thế sử dụng bashhoặc shell C của riêng tôi.

Dung dịch vỏ C

Đây là cách bạn có thể làm với shell Hamilton C , bao gồm cả phiên bản miễn phí :

cd F2
foreach i (...\*)
   if ( -f $i ) then
      if ( -e F1\$i ) cp F1\$i Fbackup\$i
      cp $i F1\$i
   end
end

Các ...ký hiệu là một ký tự đại diện thư mục không xác định phù hợp không hay nhiều mức độ thư mục, bất cứ điều gì cần thiết để làm cho phần còn lại của trận đấu mẫu. ...\*phù hợp với mọi tập tin hoặc thư mục trong F2cây thư mục. Các -enhà điều hành kiểm tra cho sự tồn tại và -fkiểm tra điều hành cho các tập tin.

Đoạn mã này giả định không có tập tin hoặc thư mục ẩn nào đáng quan tâm. Nó cũng giả định rằng mọi thư mục trong F2(ngay cả khi không phải mọi tệp) đã tồn tại trong F1Fbackup.

Nếu các tệp ẩn và thư mục bị thiếu cần được xem xét, giải pháp sẽ là đặt nonohidden = 1mkdirmọi thư mục bị thiếu:

cd F2
@ nonohidden = 1
foreach i (...\*)
   if ( -f $i ) then
      if ( -e F1\$i ) then
         if ( ! -e Fbackup\$i:h ) mkdir -r Fbackup\$i:h
         cp F1\$i Fbackup\$i
      end
      if ( ! -e F1\$i:h ) mkdir -r F1\$i:h
      cp $i F1\$i
   end
end

bash dung dịch

Nếu bạn thích Cygwin bash , bạn sẽ cần sử dụng findthay cho ...ký tự đại diện để treewalk F2thư mục. Đây là giải pháp có thể trông như thế nào. (Tôi không phải là bashchuyên gia nên có thể cải thiện điều này.)

Đầu tiên, tạo một kịch bản, gọi nó backupscript.sh:

#!/usr/bin/bash
if [ -f "$@" ]; then
   if [ -e F1/"$@" ]; then
      cp F1/"$@" Fbackup/"$@"
   fi
   head=$(dirname "$@")
   if [ ! -e F1/"$head" ]; then
      mkdir -p F1/"$head"
   fi
   cp "$@" F1/"$@"
end

Sau đó chạy như sau:

cd F2
find . -type f  | xargs -I "{}" bash -c "backupscript.sh {}"

Cảm ơn đã phản hồi lớn. Kiến thức bash của tôi không đủ để hiểu hoàn toàn kịch bản, nhưng nói chung tôi hiểu cách nó được thực hiện.
Larry Cinnabar
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.