2012-12-13 31 views
8

Tôi muốn sao chép một tệp nhất định vào một vị trí, bất kể tệp đó đã tồn tại ở đích hay chưa. Tôi đang cố gắng để sao chép thông qua shell script.But tập tin không được sao chép. Tôi đang sử dụng lệnh sauSao chép và ghi đè tập tin trong tập lệnh shell

/bin/cp -rf /source/file /destination

nhưng không hiệu quả.

+0

có lẽ bạn nên thử --remove-điểm đến – jDourlens

+1

'cp' đè điểm đến trừ khi tùy chọn '-n' được đưa ra, do đó lệnh của bạn sẽ thành công. Ngoài ra bạn đã không cho chúng tôi biết lý do tại sao bạn nghĩ rằng lệnh của bạn không thành công. – scai

+0

Có thông báo lỗi nào không? –

Trả lời

8

Câu hỏi này đã được đã được thảo luận, tuy nhiên bạn có thể viết một kịch bản ít như thế này:

#!/bin/bash 
if [ ! -d "$2" ]; then 
    mkdir -p "$2" 
fi 
cp -R "$1" "$2" 
6

Sử dụng

cp -fr /source/file /destination 

này có lẽ nên giải quyết vấn đề.

13

Vấn đề của bạn có thể do bí danh cho lệnh cp được tạo trong hệ thống của bạn theo mặc định (bạn có thể thấy al bí danh của mình bằng cách nhập "bí danh"). Ví dụ: hệ thống của tôi có các alis sau theo mặc định: alias cp = 'cp -i', trong đó tùy chọn -i ghi đè -f, tức là cp sẽ luôn nhắc ghi đè xác nhận.

Những gì bạn cần trong trường hợp này (điều đó thực sự sẽ hoạt động ngay cả khi bạn không có bí danh) là để "có" cho xác nhận đó. Để làm điều đó chỉ cần sửa đổi lệnh cp của bạn để trông như thế này:

yes | cp/nguồn/file/đích

+0

Hoàn hảo, cảm ơn bạn vì điều này! –

1

/bin/cp -rf src dst hoặc /usr/bin/env cp -rf

+1

bạn có thể giải thích tại sao nó hoạt động thay vì mã OP? – Math

+0

điều này là do OP có thể vô tình có cp bí danh để 'cp -i', và tôi nghĩ rằng một số (tất cả?) Hệ thống sẽ ưu tiên các tùy chọn -i. Ví dụ, trên hệ thống của tôi: '> mà cp alias cp = 'cp -i' \t/bin/cp > cp abc.txt efg.txt cp: ghi đè 'efg.txt'? n > cp -f abc.txt efg.txt cp: ghi đè 'efg.txt '? n' – verboze

Các vấn đề liên quan