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.

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


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

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.


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

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

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


9

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

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

zaktualizuje twój istniejący plik nowszym.


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


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



5

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

command cp -rf /zzz/zzz/*


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


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.


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

-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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.