Як змусити cp перезаписати без підтвердження


667

Я намагаюся використовувати cpкоманду і примусити перезаписати.

Я спробував cp -rf /foo/* /bar, але мені все ще пропонується підтвердити кожне перезапис.

Відповіді:


1112

Можна зробити yes | cp -rf xxx yyy, але мій gutfeeling говорить, що якщо ви робите це як root - ваш .bashrcабо .profileмає псевдонім cpдо cp -i, більшість сучасних систем (насамперед RH-похідних) роблять це для кореневих профілів.

Ви можете перевірити існуючі псевдоніми, запустивши aliasв командному рядку або which cpперевірити псевдоніми лише для cp.

Якщо у вас визначений псевдонім, запуск unalias cpбуде скасовувати це для поточного сеансу, інакше ви можете просто видалити його зі свого профілю оболонки.

Ви можете тимчасово обійти псевдонім і використовувати невідчужувану версію команди, префіксуючи її \, наприклад\cp whatever


3
Крім того, будьте обережні - навіть якщо псевдонім не написаний безпосередньо в .bashrc, якщо щось інше в цьому файлі закінчується викликом чогось іншого, що маніпулює псевдонімом для cp, ви зіткнетеся з такою поведінкою.
Джон

4
Під "сучасними системами" він означає RHEL / centos / fedora і, можливо, щось інше, Debian / Ubuntu не має псевдоніму cp. Я віддаю перевагу RHEL на сервері і використовував Fedora майже десятиліття, але підтримка спільноти Ubuntu та перехід на Gnome змусили мене після того, як Nvidia вбив мою установку Fedora. Я ¯\_(ツ)_/¯про це.
Рей Фосс

2
@RayFoss Додав (primarily RH-derivatives)зауваження :)
favoretti

зробивши unalias cpта скопіювавши все, що потрібно для копіювання, ви можете встановити псевдонім до його типового значення, виконавши alias cp='cp -i'. Після цього запустіть, alias cpщоб ви могли переконатися, що він повернувся до псевдоніму за замовчуванням.
jaxarroyo

287

Це, мабуть, викликано тим, cpщо вже відчужувалося щось подібне cp -i. Телефонувати cpбезпосередньо слід:

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

Ще один спосіб обійти це використання yesкоманди:

yes | cp -rf /zzz/zzz/* /xxx/xxx

6
так, я зробив Unalias cp -i, тепер його працює .. Дякую за цінну відповідь.
thiyagu114

5
Мені подобається, що Unix забезпечує yesкоманду. Веселий. І коли-небудь я можу ним скористатися.
Меттью Лейнганг

3
так, це було придушено, приємний улов :) Ви можете використовувати \ cp для виклику оригінального cp, простіше, ніж запам'ятовувати шлях / bin / cp
Hugo Zaragoza

Так, це ще один спосіб обійти псевдонім. Вигляд акуратного злому!
pgl

1
Цей спосіб більш безпечний.
plusmancn

115

Як деякі інші відповіді заявили, ви , ймовірно , використовувати псевдонім де - небудь , яка відображає cpна cp -iабо що - щось подібне. Ви можете запустити команду без будь-яких псевдонімів, попередньо виконавши її з косою рисою. У вашому випадку спробуйте

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

Зворотна косою рисою тимчасово вимкне будь-які псевдоніми, які ви викликали cp.


2
@zhouji Люфт вимикає псевдонім, як зазначено у моїй відповіді. Тож замість виклику псевдоніма cp, \cpвикличе команду cp. Це здається еквівалентом бігу command cp.
Кріс

66

Ви , напевно, де - то псевдонім, відображення cpв cp -i; оскільки з налаштуваннями за замовчуванням cpне буде просити перезаписати. Перевірте своє .bashrc, своє .profileтощо

Див. Cp manpage : Тільки коли -iвказаний параметр, cpфактично підкаже перед перезаписом.

Ви можете перевірити це за допомогою aliasкоманди:

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

Щоб визначити псевдонім, використовуйте:

$ unalias cp

так, я зробив Unalias cp -i, тепер його працює .. Дякую за цінну відповідь.
thiyagu114

1
це просто "unalias cp"
Krv

49

Як було сказано в інших відповідях, це може статися, якщо cpце псевдонім cp -i.

Ви можете додати a \перед cpкомандою, щоб використовувати його без псевдоніму.

\cp -fR source target

1
Як ви вже говорили, про це вже заявили інші. Чому це отримало 45 оновлень?
phil294

@ phil294 Я думаю, що це найпростіший спосіб, не змінюючи псевдонім або видаляючи псевдонім cp, який може бути корисним для інших звичаїв. `` Тут дуже корисно.
Арнольд Роа

18

За замовчуванням cpмає псевдонім до cp -i. Ви можете перевірити це, набрати aliasта побачити такі, як:

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'

Для вирішення цієї проблеми просто скористайтеся /bin/cp /from /toкомандоюcp /from /to


9

Ви також можете використовувати цю команду:

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

він би оновив ваш наявний файл новим.


8

cp зазвичай псевдонім так

alias cp='cp -i'   # i.e. ask questions of overwriting

якщо ви впевнені, що хочете зробити перезапис, скористайтеся цим:

/bin/cp <arguments here> src dest


7

Тому я багато в цьому стикаюся, тому що я тримаю cp непідвладно cp -iv, і я знайшов акуратний трюк. Виявляється, що поки -iі -nобидва скасовують попередні директиви перезапису, -fце не робить. Однак, якщо ви використовуєте, -nfце додає можливість очищення -i. Тому:

cp -f /foo/* /bar  <-- Prompt
cp -nf /foo/* /bar <-- No Prompt

Досить акуратно так? / некропост



5

Ще один спосіб викликати команду без псевдоніму - використовувати commandвбудований в bash.

command cp -rf /zzz/zzz/*


4

-n - "не перезаписати", але його питання абсолютно протилежне тому, на що ви відповіли.

Щоб уникнути цього підтвердження, ви можете просто запустити команду cp з абсолютним шляхом, це дозволить уникнути псевдоніму.

/ bin / cp вихідний файл призначення


2

Якщо ви хочете зберегти псевдонім на глобальному рівні таким, який є, і просто хочете змінити свій сценарій.

Просто використовуйте:

псевдонім cp = cp

а потім напишіть свої подальші команди.


0

Я просто використав Unalias, щоб видалити псевдонім "cp -i", потім зробіть копію, а потім відновіть псевдонім. :

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

Не найкрасивіший код, але простий у налаштуванні та ефективності. Я також перевіряю, псевдонім вже встановлений з простим

alias |grep cp

-2

Це не так cp -i. Якщо ви не хочете, щоб вас просили підтвердження, це cp -n; наприклад:

cp -n src dest

Або у випадку каталогів / папок:

cp -nr src_dir dest_dir

2
Інші заявляли, що cp, спрямований на користувача, позначається cp -iсистемою, це означає, що вони намагаються подолати типовий і примусити перезаписати. Це звучить , як ви , можливо, переплутав , що за те , що пропонований синтаксис, але -nбуде запобігти перезапис.
Покинутий кошик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.