如何强制cp覆盖而不确认

发布于 2024-12-21 02:23:58 字数 72 浏览 1 评论 0原文

我正在尝试使用 cp 命令并强制覆盖。

我已尝试 cp -rf /foo/* /bar,但仍然提示我确认每个覆盖。

I'm trying to use the cp command and force an overwrite.

I have tried cp -rf /foo/* /bar, but I am still prompted to confirm each overwrite.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(19

酒废 2024-12-28 02:23:58

你可以做 yes | cp -rf xxx yyy,但我的直觉告诉我,如果您以 root 身份执行此操作 - 您的 .bashrc.profile 的别名为 cpcp -i,大多数现代系统(主要是 RH 衍生品)都会对根配置文件执行此操作。

您可以通过在命令提示符下运行 alias 来检查现有别名,或者运行 which cp 仅检查 cp 的别名。

如果您确实定义了别名,则运行 unalias cp 将取消当前会话的别名,否则您可以将其从 shell 配置文件中删除。

您可以暂时绕过别名并使用命令的非别名版本,方法是在命令前面加上 \ 前缀,例如 \cp another

You can do yes | cp -rf xxx yyy, but my gutfeeling says that if you do it as root - your .bashrc or .profile has an alias of cp to cp -i, most modern systems (primarily RH-derivatives) do that to root profiles.

You can check existing aliases by running alias at the command prompt, or which cp to check aliases only for cp.

If you do have an alias defined, running unalias cp will abolish that for the current session, otherwise you can just remove it from your shell profile.

You can temporarily bypass an alias and use the non-aliased version of a command by prefixing it with \, e.g. \cp whatever

不奢求什么 2024-12-28 02:23:58

这可能是由于 cp 已经被别名为 cp -i 等内容造成的。直接调用 cp 应该可以:

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

解决此问题的另一种方法是使用 yes 命令:

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

This is probably caused by cp being already aliased to something like cp -i. Calling cp directly should work:

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

Another way to get around this is to use the yes command:

yes | cp -rf /zzz/zzz/* /xxx/xxx
笑梦风尘 2024-12-28 02:23:58

正如其他一些答案所述,您可能在某个地方使用别名将 cp 映射到 cp -i 或类似的东西。您可以通过在命令前面加上反斜杠来运行没有任何别名的命令。对于您的情况,请尝试

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

反斜杠将暂时禁用您调用的任何别名cp

As some of the other answers have stated, you probably use an alias somewhere which maps cp to cp -i or something similar. You can run a command without any aliases by preceding it with a backslash. In your case, try

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

The backslash will temporarily disable any aliases you have called cp.

无悔心 2024-12-28 02:23:58

您可能在某处有一个别名,将 cp 映射到 cp -i ;因为使用默认设置,cp 不会要求覆盖。检查您的 .bashrc、您的 .profile 等。

请参阅 cp manpage:只有指定-i参数时,cp才会在覆盖前实际提示。

您可以通过 alias 命令进行检查:

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

要取消定义别名,请使用:

$ unalias cp

You probably have an alias somewhere, mapping cp to cp -i; because with the default settings, cp won't ask to overwrite. Check your .bashrc, your .profile etc.

See cp manpage: Only when -i parameter is specified will cp actually prompt before overwriting.

You can check this via the alias command:

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

To undefine the alias, use:

$ unalias cp
月朦胧 2024-12-28 02:23:58

正如其他答案所述,如果 cp 是 cp -i 的别名,则可能会发生这种情况。

您可以在 cp 命令前附加 \ 以在没有别名的情况下使用它。

\cp -fR source target

As other answers have stated, this could happend if cp is an alias of cp -i.

You can append a \ before the cp command to use it without alias.

\cp -fR source target
悟红尘 2024-12-28 02:23:58

默认情况下,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 /到

By default cp has aliase to cp -i. You can check it, type alias and you can see some like:

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'

To solve this problem just use /bin/cp /from /to command instead cp /from /to

邮友 2024-12-28 02:23:58

所以我经常遇到这种情况,因为我将 cp 别名为 cp -iv ,并且我发现了一个巧妙的技巧。事实证明,虽然 -i-n 都取消了之前的覆盖指令,但 -f 却没有。但是,如果您使用 -nf,它会增加清除 -i 的功能。所以:

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

很整洁吧? /死尸帖

So I run into this a lot because I keep cp aliased to cp -iv, and I found a neat trick. It turns out that while -i and -n both cancel previous overwrite directives, -f does not. However, if you use -nf it adds the ability to clear the -i. So:

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

Pretty neat huh? /necropost

趁年轻赶紧闹 2024-12-28 02:23:58

对我来说最简单的方法:

yes | cp source destination

The simplest way for me:

yes | cp source destination
慢慢从新开始 2024-12-28 02:23:58

您也可以使用此命令:

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

它会使用较新的文件更新您的现有文件。

you can use this command as well:

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

it would update your existing file with the newer one though.

回首观望 2024-12-28 02:23:58

<​​code>cp 通常是这样的别名,然后使用:

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

如果您确定要进行覆盖,则

/bin/cp <arguments here> src dest

cp is usually aliased like this

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

if you are sure that you want to do the overwrite then use this:

/bin/cp <arguments here> src dest
是伱的 2024-12-28 02:23:58
cp -u ...
cp --update ...

也有效。

cp -u ...
cp --update ...

also works.

北凤男飞 2024-12-28 02:23:58

不使用别名调用命令的另一种方法是使用 bash 中的内置命令。

命令 cp -rf /zzz/zzz/*

Another way to call the command without the alias is to use the command builtin in bash.

command cp -rf /zzz/zzz/*

执笔绘流年 2024-12-28 02:23:58

-n 是“不覆盖”,但他的问题与您的回答完全相反。

为了避免这种确认,您可以简单地使用绝对路径运行 cp 命令,它将避免别名。

/bin/cp 源文件目标

-n is "not to overwrite" but his question is totally opposite what you replied for.

To avoid this confirmation you can simply run the cp command wiht absolute path, it will avoid the alias.

/bin/cp sourcefile destination

安稳善良 2024-12-28 02:23:58

如果您想在全局级别保持别名不变并且只想更改您的脚本。

只需使用:

alias cp=cp

,然后编写后续命令。

If you want to keep alias at the global level as is and just want to change for your script.

Just use:

alias cp=cp

and then write your follow up commands.

盗梦空间 2024-12-28 02:23:58

对我来说,越简单越好。这种方式不显示STDOUT:

yes | cp -rf source destination >/dev/null 2>&1

For me, the simpler the better. This way does not show STDOUT:

yes | cp -rf source destination >/dev/null 2>&1
荒人说梦 2024-12-28 02:23:58

我只是使用 unalias 删除“cp -i”别名,然后进行复制,然后设置回别名。 :

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

不是最漂亮的代码,但易于设置且高效。我还检查别名是否已通过简单的设置恢复

alias |grep cp

I simply used unalias to remove the "cp -i" alias, then do the copy, then set back the alias. :

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

Not the most beautiful code, but easy to set and efficient. I also check the alias is already set back with a simple

alias |grep cp
三岁铭 2024-12-28 02:23:58

如果这是一个小文本文件,您也可以考虑这样:

cat my.cnf > /etc/my.cnf

不确定大文件或二进制文件的效率或副作用。

If this is a small text file, you may consider this way too:

cat my.cnf > /etc/my.cnf

Not sure about the efficiency or side effects for large or binary files.

江湖正好 2024-12-28 02:23:58

它不是cp -i。如果您不想被要求确认,
它是cp -n;例如:

cp -n src dest

或者在目录/文件夹的情况下是:

cp -nr src_dir dest_dir

It is not cp -i. If you do not want to be asked for confirmation,
it is cp -n; for example:

cp -n src dest

Or in case of directories/folders is:

cp -nr src_dir dest_dir
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文