Jak zmusić CP do zastąpienia bez potwierdzenia

667

Próbuję użyć cppolecenia i wymusić zastąpienie.

Próbowałem cp -rf /foo/* /bar, ale wciąż pojawia się monit o potwierdzenie każdego zastąpienia.

thiyagu114
źródło

Odpowiedzi:

1112

Możesz to zrobić yes | cp -rf xxx yyy, ale moje przeczucie mówi, że jeśli robisz to jako root - twój .bashrclub .profilema alias cpto cp -i, większość nowoczesnych systemów (głównie pochodne RH) robi to, aby rootować profile.

Możesz sprawdzić istniejące aliasy, uruchamiając je aliasz wiersza polecenia, lub which cpaby sprawdzić tylko dla aliasów cp.

Jeśli masz zdefiniowany alias, bieganie unalias cpzniesie go dla bieżącej sesji, w przeciwnym razie możesz po prostu usunąć go z profilu powłoki.

Możesz tymczasowo ominąć alias i użyć niealiasowej wersji polecenia, poprzedzając go \np.\cp whatever

favoretti
źródło
3
Zachowaj też ostrożność - nawet jeśli alias nie jest zapisany bezpośrednio w .bashrc, jeśli cokolwiek innego, co ten plik wywoła, wywoła coś innego, co manipuluje aliasem dla cp, napotkasz takie zachowanie.
Jon
4
Przez „nowoczesne systemy” rozumie on RHEL / centos / fedora i być może coś innego, Debian / Ubuntu nie alias cp. Wolę RHEL na serwerze i korzystałem z Fedory przez prawie dekadę, ale wsparcie społeczności dla Ubuntu i powrót do Gnome zaskoczyły mnie po tym, jak Nvidia zabiła moją instalację Fedory. Jestem ¯\_(ツ)_/¯o tym.
Ray Foss,
2
@RayFoss Dodano (primarily RH-derivatives)uwagę :)
favoretti
po zrobieniu unalias cpi skopiowaniu wszystkiego, co chcesz skopiować, możesz przywrócić domyślny alias, robiąc to alias cp='cp -i'. Następnie uruchom, alias cpaby sprawdzić, czy wrócił do domyślnego aliasu.
jaxarroyo
287

Jest to prawdopodobnie spowodowane tym, cpże jest już aliasowany do czegoś podobnego cp -i. cpBezpośrednie dzwonienie powinno działać:

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

Innym sposobem obejścia tego jest użycie yespolecenia:

yes | cp -rf /zzz/zzz/* /xxx/xxx
pgl
źródło
6
tak, zrobiłem unalias cp -i, teraz działa. Dziękuję za cenną odpowiedź.
thiyagu114,
5
Podoba mi się, że Unix zapewnia yespolecenie. Wesoły. I pewnego dnia mogę go użyć.
Matthew Leingang
3
tak, to było aliasy, fajny haczyk :) Możesz użyć \ cp, aby wywołać oryginalny cp, łatwiej niż zapamiętanie ścieżki / bin / cp
Hugo Zaragoza
Tak, to inny sposób na ominięcie aliasu. Trochę fajnego hacka!
pgl
1
Ten sposób jest bezpieczniejszy.
plusmancn
115

Jak niektórzy z pozostałych odpowiedzi stwierdziły, prawdopodobnie gdzieś użyć aliasu, który mapuje cpdo cp -ilub coś podobnego. Możesz uruchomić polecenie bez żadnych aliasów, poprzedzając je odwrotnym ukośnikiem. W twoim przypadku spróbuj

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

Odwrotny ukośnik tymczasowo wyłączy wszystkie aliasy, które wywołałeś cp.

Chris
źródło
2
@zhouji Luz wyłącza alias, jak podano w mojej odpowiedzi. Zamiast wywoływać alias cp, \cpwywoła polecenie cp. Wydaje się, że jest to odpowiednik działania command cp.
Chris
66

Prawdopodobnie masz gdzieś alias, odwzorowujący cpna cp -i; ponieważ przy ustawieniach domyślnych cpnie poprosi o zastąpienie. Sprawdź .bashrcswoje .profileitp.

Zobacz cp manpage : Tylko wtedy, gdy -iparametr jest określony, cpfaktycznie zostanie wyświetlony monit przed nadpisaniem.

Możesz to sprawdzić za pomocą aliaspolecenia:

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

Aby zdefiniować alias, użyj:

$ unalias cp
kodowanie
źródło
tak, zrobiłem unalias cp -i, teraz działa. Dziękuję za cenną odpowiedź.
thiyagu114,
1
to jest po prostu „unalias cp”
Krv Perera
49

Jak podają inne odpowiedzi, może się to zdarzyć, jeśli cpjest to pseudonim cp -i.

Możesz dołączyć \przed cppoleceniem, aby użyć go bez aliasu.

\cp -fR source target
Arnold Roa
źródło
1
Jak powiedziałeś, inni już to stwierdzili. Dlaczego otrzymało 45 głosów pozytywnych?
phil294,
@ phil294 Wydaje mi się, że jest to najłatwiejszy sposób bez modyfikowania aliasu lub usuwania aliasu cp, który może być przydatny w innych zastosowaniach. `` Jest bardzo przydatny tutaj.
Arnold Roa
18

Domyślnie cpma alias do cp -i. Możesz to sprawdzić, wpisać aliasi możesz zobaczyć niektóre z nich:

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'

Aby rozwiązać ten problem, po prostu użyj /bin/cp /from /topoleceniacp /from /to

Avseiytsev Dmitriy
źródło
9

możesz również użyć tego polecenia:

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

zaktualizuje twój istniejący plik nowszym.

sigeje
źródło
8

cp jest zwykle aliasowany w ten sposób

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

jeśli jesteś pewien, że chcesz wykonać nadpisanie, użyj tego:

/bin/cp <arguments here> src dest
użytkownik5035029
źródło
7

Więc często się w to wpakowałem, ponieważ wciąż mam alias do cp cp -ivi znalazłem fajną sztuczkę. Okazuje się, że chociaż -ii -noba anulują poprzednie dyrektywy zastępujące, -fto nie. Jednak jeśli -nfgo użyjesz , dodasz możliwość wyczyszczenia -i. Więc:

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

Całkiem nieźle, prawda? / necropost

Adam McCormick
źródło
6
cp -u ...
cp --update ...

działa również.

softwarevamp
źródło
5

Innym sposobem na wywołanie polecenia bez aliasu jest użycie commandwbudowanego w bash.

command cp -rf /zzz/zzz/*

Steve Buzonas
źródło
4

-n jest „nie do zastąpienia”, ale jego pytanie jest całkowicie przeciwne do tego, na co odpowiedziałeś.

Aby uniknąć tego potwierdzenia, wystarczy uruchomić polecenie cp z bezwzględną ścieżką, uniknie to aliasu.

Miejsce docelowe pliku źródłowego / bin / cp

Rohit Rajput
źródło
2

Jeśli chcesz zachować alias na poziomie globalnym i po prostu chcesz zmienić skrypt.

Po prostu użyj:

alias cp = cp

a następnie napisz komendy uzupełniające.

Ankit Bhatnagar
źródło
0

Po prostu użyłem unalias do usunięcia aliasu „cp -i”, a następnie wykonałem kopię, a następnie cofnąłem alias. :

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

Nie jest to najpiękniejszy kod, ale łatwy do ustawienia i wydajny. Sprawdzam też, że alias jest już ustawiony za pomocą prostego

alias |grep cp
Maat
źródło
-2

Nie jest cp -i. Jeśli nie chcesz być proszony o potwierdzenie, jest to cp -n; na przykład:

cp -n src dest

Lub w przypadku katalogów / folderów jest:

cp -nr src_dir dest_dir
mihaitzateo
źródło
2
Inni twierdzili, że system cp jest skierowany do użytkownika cp -i, co oznacza, że ​​próbowali przezwyciężyć domyślne ustawienie i wymusić nadpisanie. To brzmi jak można mylić, że za to, że zasugerował składnia, ale -nbędzie zapobiegać zastępującego.
Opuszczony