jak zatrzymać cp: overwrite './xxx? skłonić

19

Jak mogę powstrzymać polecenie cp przed monitowaniem o zastąpienie. Chcę zastąpić wszystkie pliki bez konieczności wracania do terminala. Ponieważ są to duże pliki i ich ukończenie zajmuje trochę czasu.

Próbowałem użyć opcji -f. Nadal pyta, czy chcę zastąpić.

   -f, --force
          if an existing destination file cannot be opened, remove it and
          try again (redundant if the -n option is used)

cp -f /media/somedir/somefiles* .  
cp: overwrite `./somefilesxxx'? y
nelaaro
źródło

Odpowiedzi:

17

Oprócz połączeń /bin/cpmożesz wykonać jedną z następujących czynności:

\cp -f ...
command cp -f ...

Zgadzam się jednak, że nie powinieneś przyzwyczajać się do używania aliasu takiego jak cp -ilub rm -i- jeśli usiądziesz przy innej skorupie, nie będziesz miał siatki bezpieczeństwa, od której jesteś uzależniony.

Glenn Jackman
źródło
1
A whereis cppokaże, gdzie jest polecenie. Dzięki temu będziesz mógł wywołać prawdziwe polecenie zamiast aliasu.
AnthonyB,
12

Po obejrzeniu tego rozwiązania. Widziałem, że funkcja aliasu bashes była przyczyną problemów. http://systembash.com/content/prompt-to-confirm-copy-even-with-cp-f/

which cp  
alias cp='cp -i'
/bin/cp
which cp | grep cp
alias cp='cp -i'
/bin/cp

On poleca

unalias cp

Nadal chcę zachować alias, ale po prostu nie chcę, aby dotyczył tego wystąpienia. Moim rozwiązaniem jest użycie pliku binarnego z pełną ścieżką, aby funkcja aliasu bashesa nie przejęła. To działa całkiem dobrze.

/bin/cp -f /media/somedir/somefiles* .  
nelaaro
źródło
4

Niestety w systemie Linux polecenie kopiowania „cp” nie ma opcji automatycznej odpowiedzi na to pytanie za pomocą odpowiedzi „y” lub „n”. Istnieje więcej niż jedno rozwiązanie tego problemu, w zależności od tego, co chcesz zrobić. Jednym z rozwiązań jest użycie uniksowego polecenia „tak”. To polecenie będzie wyświetlało ciąg znaków wielokrotnie aż do zabicia.

Jeśli chcemy zastąpić wszystkie pliki w katalogu docelowym, można użyć polecenia „tak”, aby odpowiedzieć na wszystkie pytania za pomocą „y”. „y” jest wartością domyślną, więc nie trzeba jej podawać.

yes | cp source/*.txt destination/.

Jeśli chcemy uniknąć nadpisywania któregokolwiek z plików w katalogu docelowym, można użyć polecenia „tak”, aby odpowiedzieć na wszystkie pytania bez „n”.

yes n | cp source/*.txt destination/.

Użyj „man yes”, aby uzyskać więcej informacji na temat polecenia „yes”.

Michael Sundell
źródło