Jak używać „cp” do zastępowania plików?

10

Używając skryptu powłoki lub terminala, w jaki sposób nadpisywać pliki, które mogą być obecne lub nie. Spojrzałem na stronę podręcznika w poszukiwaniu cp, powiedziało, że użyj argumentu -f, aby wymusić nadpisanie. Ale to nic nie robi.

$ cp -f /path/to/source/file.txt /path/to/target

Czy jest też inna opcja nadpisywania plików przy użyciu typowych wbudowanych narzędzi wiersza poleceń w OS X?

rogerFernand
źródło
3
Mi to pasuje. Co robi zamiast nadpisywać, gdy próbujesz?
Gordon Davisson,
2
Jeśli nie masz uprawnień do zastąpienia pliku docelowego, to się nie powiedzie. Jeśli naprawdę chcesz zastąpić plik docelowy, możesz użyć sudona początku polecenia. Ale używaj ostrożnie!
Daniel
@Gordon Davisson: Co to robi? nic. Skopiuje pliki do katalogu docelowego tylko wtedy, gdy mvje lub ja rm.
rogerFernand
@Daniel Lawson: Bez użycia sudomogę użyć mvlub rmprzenieść lub usunąć pliki przed użyciem cp. Korzystanie sudo cpnie ma znaczenia.
rogerFernand
Curiouser i curiouser.
Daniel

Odpowiedzi:

14

Jestem zaskoczony, dlaczego cp zachowuje się w ten sposób, jeśli nie ma w tym żadnego aliasu. Jednakże, istnieje narzędzie szybkiego brudnej i niebezpieczny przewidziano taką sytuację: yes. Możesz go użyć do potoku ciągłego strumienia potwierdzeń do dowolnego polecenia, które wyświetla monity o potwierdzenie (możesz użyć go do wysłania dowolnego tekstu, ale domyślnie jest to „y”).

yes | cp foo bar wykona polecenie cp i pominie wszystkie monity o potwierdzenie.

ośmiornica
źródło
8

Może to być spowodowane przez alias polecenia.

Aby zadzwonić cpbezpośrednio, możesz użyć/bin/cp src dest

Aji
źródło
1
Nie jestem pewien, dlaczego zostało to odrzucone. Miałem wrażenie, że jawne podanie -f zastąpiłoby -i w aliasie, ale sprawdziłem i tak nie jest. Plakat powinien dowiedzieć się, czy mają alias cp (typ alias cp). Mogą zmienić alias w swoim profilu lub użyć / bin / cp zgodnie z sugestią.
octu
Używam domyślnie cptak, jak pod warunkiem Apple.
rogerFernand
@octern:roger$ alias cp -bash: alias: cp: not found
rogerFernand
Musiałem użyć / bin / cp Nie wiem dlaczego.
beingalex
1
Być może spóźniłem się, ale dla osób pochodzących z wyszukiwarki mogłem sprawdzić, czy polecenie ma jakiś alias type cp. I rzeczywiście tak było.
wrzask
2
rm foo/bar/destination && cp source foo/bar/destination

Najpierw usuwasz ( rm) miejsce docelowe, a następnie, jeśli się powiedzie ( &&), kopiujesz. Podczas usuwania folderu pamiętaj o dodaniu -rdo rm( rm -r).

vtoanb
źródło
1

Miałem też bałagan z -f, dzwonię do cp bezpośrednio z / bin i wszystko jest w porządku, alias, który domyślnie zapobiega przypadkowym nadpisywaniom / usunięciom, jest całkiem dobry, więc najlepiej go nie usuwać.

.# Alias

alias cp = 'cp -i'

jak już wspomniano, flaga -i zastępuje -f, co nie pozwoliłoby, aby poniższe polecenie działało zgodnie z przeznaczeniem.

. # / bin / cp -fauv src dst

Niklas Göransson
źródło