Próbuję użyć cp
polecenia i wymusić zastąpienie.
Próbowałem cp -rf /foo/* /bar
, ale wciąż pojawia się monit o potwierdzenie każdego zastąpienia.
Próbuję użyć cp
polecenia i wymusić zastąpienie.
Próbowałem cp -rf /foo/* /bar
, ale wciąż pojawia się monit o potwierdzenie każdego zastąpienia.
Odpowiedzi:
Możesz to 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
to 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 alias
z wiersza polecenia, lub which cp
aby sprawdzić tylko dla aliasów cp
.
Jeśli masz zdefiniowany alias, bieganie unalias cp
zniesie 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
¯\_(ツ)_/¯
o tym.
(primarily RH-derivatives)
uwagę :)
unalias cp
i skopiowaniu wszystkiego, co chcesz skopiować, możesz przywrócić domyślny alias, robiąc to alias cp='cp -i'
. Następnie uruchom, alias cp
aby sprawdzić, czy wrócił do domyślnego aliasu.
Jest to prawdopodobnie spowodowane tym, cp
że jest już aliasowany do czegoś podobnego cp -i
. cp
Bezpośrednie dzwonienie powinno działać:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Innym sposobem obejścia tego jest użycie yes
polecenia:
yes | cp -rf /zzz/zzz/* /xxx/xxx
yes
polecenie. Wesoły. I pewnego dnia mogę go użyć.
Jak niektórzy z pozostałych odpowiedzi stwierdziły, prawdopodobnie gdzieś użyć aliasu, który mapuje cp
do cp -i
lub 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
.
cp
, \cp
wywoła polecenie cp
. Wydaje się, że jest to odpowiednik działania command cp
.
Prawdopodobnie masz gdzieś alias, odwzorowujący cp
na cp -i
; ponieważ przy ustawieniach domyślnych cp
nie poprosi o zastąpienie. Sprawdź .bashrc
swoje .profile
itp.
Zobacz cp manpage : Tylko wtedy, gdy -i
parametr jest określony, cp
faktycznie zostanie wyświetlony monit przed nadpisaniem.
Możesz to sprawdzić za pomocą alias
polecenia:
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
Aby zdefiniować alias, użyj:
$ unalias cp
Jak podają inne odpowiedzi, może się to zdarzyć, jeśli cp
jest to pseudonim cp -i
.
Możesz dołączyć \
przed cp
poleceniem, aby użyć go bez aliasu.
\cp -fR source target
Domyślnie cp
ma alias do cp -i
. Możesz to sprawdzić, wpisać alias
i 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 /to
poleceniacp /from /to
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
znalazłem to
'cp' -rf * /data/danalonso_testing/target/
Źródło: /superuser/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851
Więc często się w to wpakowałem, ponieważ wciąż mam alias do cp cp -iv
i znalazłem fajną sztuczkę. Okazuje się, że chociaż -i
i -n
oba anulują poprzednie dyrektywy zastępujące, -f
to nie. Jednak jeśli -nf
go 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
cp -u ...
cp --update ...
działa również.
Innym sposobem na wywołanie polecenia bez aliasu jest użycie command
wbudowanego w bash.
command cp -rf /zzz/zzz/*
-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
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.
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
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
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 -n
będzie zapobiegać zastępującego.