Jak zmusić cp do nadpisania bez potwierdzenia

Próbuję użyć komendy cp i wymusić nadpisanie.

Próbowałem cp -rf /foo/* /bar, ale wciąż jestem poproszony o potwierdzenie każdego nadpisania.

Author: Duncan X Simpson, 2011-12-13

14 answers

Możesz zrobić yes | cp -rf xxx yyy, ale moje przeczucie mówi, że jeśli robisz to jako root - Twój .bashrc lub .profile ma alias cp do cp -i, większość nowoczesnych systemów (głównie pochodne RH) robi to dla profili root.

Można sprawdzić istniejące aliasy, uruchamiając alias w wierszu polecenia lub which cp, aby sprawdzić aliasy tylko dla cp.

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

Możesz tymczasowo ominąć alias i użyć nie aliasowanej wersji polecenia przez prefiks \, np. \cp whatever

 856
Author: favoretti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-21 11:45:52

Jest to prawdopodobnie spowodowane tym, że cp jest już aliased do czegoś takiego jak cp -i. Wywołanie cp bezpośrednio powinno działać:

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

Innym sposobem obejścia tego problemu jest użycie komendy yes:

yes | cp -rf /zzz/zzz/* /xxx/xxx
 214
Author: pgl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-13 11:20:41

Jak stwierdziły inne odpowiedzi, prawdopodobnie używasz gdzieś aliasu, który mapuje cp na cp -i lub coś podobnego. Polecenie można uruchomić bez aliasów, poprzedzając je odwrotnym ukośnikiem. W Twoim przypadku spróbuj

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

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

 89
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-13 11:30:28

Prawdopodobnie masz gdzieś alias, mapowanie cp na cp -i; ponieważ przy domyślnych ustawieniach, cp nie poprosi o nadpisanie. Sprawdź swoje .bashrc, twoje .profile itp.

Zobacz CP manpage : tylko wtedy, gdy podany jest parametr -i, cp wyświetli monit przed nadpisaniem.

Możesz to sprawdzić za pomocą polecenia alias:

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

Aby zdefiniować alias, użyj:

$ unalias cp -i
 39
Author: codeling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-07 08:46:33

Jak stwierdziły inne odpowiedzi, może się to zdarzyć, jeśli cp jest aliasem cp -i.

Możesz dodać \ przed poleceniem cp, Aby użyć go bez aliasu.

\cp -fR source target
 34
Author: Arnold Roa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-29 02:19:26

Domyślnie {[1] } ma aliase na cp -i. Możesz to sprawdzić, wpisz alias i możesz zobaczyć takie jak:

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 wystarczy użyć /bin/cp /from /to zamiast cp /from /to

 18
Author: Avseiytsev Dmitriy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-13 07:05:45

cp jest zwykle aliased tak

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
 8
Author: user5035029,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-19 14:07:18

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

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

Zaktualizowałby istniejący plik o nowszy.

 5
Author: sigeje,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-19 09:28:16

Innym sposobem wywołania komendy bez aliasu jest użycie command wbudowanego w bash.

command cp -rf /zzz/zzz/*

 4
Author: Steve Buzonas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-10 18:34:59

-n to "nie nadpisywać", ale jego pytanie jest zupełnie przeciwne temu, za co odpowiedziałeś.

Aby uniknąć tego potwierdzenia, możesz po prostu uruchomić polecenie CP z absolutną ścieżką, uniknie ona aliasu.

/Bin/CP sourcefile destination

 2
Author: Rohit Rajput,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 16:03:46
cp -u ...
cp --update ...

Również działa.

 2
Author: softwarevamp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-13 11:39:23

Jeśli chcesz zachować alias na poziomie globalnym tak jak jest i po prostu chcesz zmienić swój skrypt.

Po prostu użyj:

Alias cp=CP

A następnie napisz swoje kolejne polecenia.

 1
Author: Ankit Bhatnagar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-11 07:29:08

Po prostu użyłem unialias, aby usunąć alias "cp-i", następnie wykonać kopię, a następnie ustawić z powrotem alias. :

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

Nie najpiękniejszy kod, ale łatwy do Ustawienia i wydajny. Sprawdzam również, że alias jest już ustawiony za pomocą prostego

alias |grep cp
 0
Author: Maat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-25 10:11:49

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

cp -n src dest

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

cp -nr src_dir dest_dir
 -2
Author: mihaitzateo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-19 14:02:39