확인없이 cp를 강제로 덮어 쓰는 방법


667

cp명령 을 사용하고 덮어 쓰려고합니다.

시도 cp -rf /foo/* /bar했지만 여전히 각 덮어 쓰기를 확인하라는 메시지가 표시됩니다.

답변:


1112

당신이 할 수있는 yes | cp -rf xxx yyy,하지만 내 gutfeeling 당신이 루트로 할 경우 말한다 - 당신 .bashrc이나 .profile의 별칭이 cp대상을 cp -i, 가장 현대적인 시스템 (주로 RH-유도체) 루트 프로필에 그렇게.

alias명령 프롬프트에서 실행 하거나 which cp에 대한 별칭 만 확인 하여 기존 별칭을 확인할 수 있습니다 cp.

별칭이 정의되어 있으면 unalias cp현재 세션에 대해 별칭을 실행 하면 셸 프로필에서 제거 할 수 있습니다.

일시적 별칭 우회를 앞에하여 명령의 비 앨리어스 버전을 사용할 수 있습니다 \, 예를 들어,\cp whatever


3
또한, 조심해야 - 경우 별명이 직접 .bashrc에 작성되지 않은 경우에도 아무것도 , 당신은이 문제로 실행됩니다 다른 CP에 대한 별칭을 조작하는 다른 뭔가를 호출하며이 파일 호출을 종료합니다.
Jon

4
"현대 시스템"이라는 말은 RHEL / centos / fedora를 의미하며 Debian / Ubuntu는 cp의 별칭을 지정하지 않습니다. 서버에서 RHEL을 선호하고 거의 10 년 동안 Fedora를 사용했지만 Nvidia가 Fedora 설치를 종료 한 후 Ubuntu의 커뮤니티 지원과 Gnome으로의 전환이 저를 울 렸습니다. 나는 그것에 ¯\_(ツ)_/¯관한 것입니다.
Ray Foss

2
@RayFoss (primarily RH-derivatives)의견을 추가했습니다 :)
favoretti

unalias cp복사 및 복사해야하는 모든 작업 을 복사 한 후을 수행 하여 별칭을 기본값으로 다시 설정할 수 있습니다 alias cp='cp -i'. 그런 다음 실행 alias cp하여 기본 별칭으로 돌아 왔는지 확인할 수 있습니다.
jaxarroyo

287

이것은 cp이미와 같은 별칭으로 인해 발생했을 수 cp -i있습니다. cp직접 전화 하면 작동합니다.

/bin/cp -rf /zzz/zzz/* /xxx/xxx

이 문제를 해결하는 또 다른 방법은 다음 yes명령 을 사용하는 것입니다 .

yes | cp -rf /zzz/zzz/* /xxx/xxx

6
그렇습니다. 저는 현재 cp -i라는 별칭을 사용했습니다. 귀중한 답변에 감사드립니다.
thiyagu114

5
나는 유닉스가 yes명령을 제공한다는 것을 좋아합니다 . 재밌어요 그리고 언젠가 나는 그것을 사용할 수 있습니다.
Matthew Leingang

3
그렇습니다. 별명을 붙였습니다. 멋진 캐치 :) / bin / cp 경로를 기억하는 것보다 쉽게 ​​\ cp를 사용하여 원래의 cp를 호출 할 수 있습니다
Hugo Zaragoza

그렇습니다. 별칭을 우회하는 또 다른 방법입니다. 깔끔한 해킹의 종류!
pgl

1
이 방법이 더 안전합니다.
plusmancn

115

다른 답변의 일부가 언급했듯이, 당신은 아마 매핑하는 별칭 어딘가에 사용 cpcp -i또는 이와 유사한합니다. 백 슬래시를 선행하여 별명없이 명령을 실행할 수 있습니다. 귀하의 경우 시도하십시오

\cp -r /zzz/zzz/* /xxx/xxx

백 슬래시는 호출 한 별칭을 일시적으로 비활성화합니다 cp.


2
@zhouji 내 대답에 명시된 것처럼 백래시는 별칭을 비활성화합니다. 그래서 그 대신 별칭을 호출하는 cp, \cp명령을 호출합니다 cp. 이것은 running과 같습니다 command cp.
Chris

66

어딘가에 별칭이있을 cp수 있습니다 cp -i. 기본 설정 cp으로 덮어 쓰기를 요청하지 않기 때문입니다 . 당신의 선택 .bashrc, 당신의 .profile

cp 맨 페이지 참조 : -i매개 변수가 지정된 경우에만 cp덮어 쓰기 전에 실제로 프롬프트 가 표시됩니다 .

다음 alias명령을 통해이를 확인할 수 있습니다 .

$ alias
alias cp='cp -i'
alias diff='diff -u'
....

별명을 정의 해제하려면 다음을 사용하십시오.

$ unalias cp

그렇습니다. 저는 현재 cp -i라는 별칭을 사용했습니다. 귀중한 답변에 감사드립니다.
thiyagu114

1
그것은 단지 "unalias cp"입니다
Krv Perera

49

다른 답변에서 언급했듯이이 cp가 별칭 인 경우 발생할 수 cp -i있습니다.

별명없이 사용 \하기 위해 cp명령 앞에 a 를 추가 할 수 있습니다 .

\cp -fR source target

1
당신이 말했듯이, 다른 사람들은 이미 이것을 언급했습니다. 왜 45 번의 공감대를 얻었습니까?
phil294

@ phil294 다른 사용법에 유용 할 수있는 별칭을 수정하거나 cp 별칭을 제거하지 않는 가장 쉬운 방법이라고 생각합니다. ``여기서 매우 유용합니다.
Arnold Roa

18

기본적으로의 cp별칭은 cp -i입니다. 확인하고 입력 alias하면 다음과 같은 것을 볼 수 있습니다.

alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'

이 문제를 해결하려면 /bin/cp /from /to대신 명령을 사용하십시오.cp /from /to


9

이 명령도 사용할 수 있습니다 :

cp -ru /zzz/zzz/* /xxx/xxx

그래도 기존 파일을 최신 파일로 업데이트합니다.


8

cp 일반적으로 다음과 같이 별칭이 지정됩니다

alias cp='cp -i'   # i.e. ask questions of overwriting

덮어 쓰기를 원한다면 다음을 사용하십시오.

/bin/cp <arguments here> src dest


7

cp 별칭을 유지하고 있기 때문에이 문제가 많이 cp -iv발생하고 깔끔한 트릭을 발견했습니다. while -i-n둘 다 이전 덮어 쓰기 지시문을 취소하지만 -f그렇지 않습니다. 그러나 사용 -nf하면를 지우는 기능이 추가 -i됩니다. 그래서:

cp -f /foo/* /bar  <-- Prompt
cp -nf /foo/* /bar <-- No Prompt

꽤 깔끔해? / necropost



5

별명없이 명령을 호출하는 다른 방법은 command내장 bash 를 사용하는 것 입니다.

command cp -rf /zzz/zzz/*


4

-n은 "덮어 쓰지 않음"이지만 그의 질문은 대답 한 것과 완전히 반대입니다.

이 확인을 피하기 위해 절대 경로로 cp 명령을 실행하면 별명을 피할 수 있습니다.

/ bin / cp 소스 파일 대상


2

별칭을 그대로 글로벌 수준으로 유지하고 스크립트를 변경하려는 경우.

그냥 사용하십시오 :

별명 cp = cp

그리고 후속 명령을 작성하십시오.


0

나는 단순히 별명을 사용하여 "cp -i"별명을 제거한 다음 복사를 한 다음 별명을 다시 설정합니다. :

unalias cp  
cp -f foo foo.copy  
alias cp="cp -i"  

가장 아름다운 코드는 아니지만 설정하기 쉽고 효율적입니다. 또한 별칭이 이미 간단한 것으로 설정되어 있는지 확인합니다.

alias |grep cp

-2

아닙니다 cp -i. 확인을 요청하지 않으려면 cp -n; 예를 들면 다음과 같습니다.

cp -n src dest

또는 디렉토리 / 폴더의 경우 :

cp -nr src_dir dest_dir

2
다른 사람들은 사용자가 직면 한 cp가 cp -i시스템 에 의해 심볼릭 링크되어 있다고 말하고 있는데 , 이는 기본값을 극복하고 덮어 쓰기를 강요 하고 있음을 의미 합니다. 제안 된 구문에 대해 혼동했을 수 있지만 덮어 쓰기 -n방지 합니다.
버려진 카트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.