### Summary

When calling `ansible -m ansible.builtin.copy -a 'src=/dev/null dest=/tmp/xxx remote_src=true' localhost -b`, ansible complains that the _target_ file doesn't exist, and then, if the target file exists, removes the source `/dev/null` instead of copying it onto the target.

### Issue Type

Bug Report

### Component Name

ansible.builtin.copy

### Ansible Version

```console
$ ansible --version
ansible [core 2.12.6]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/elavarde/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  ansible collection location = /home/elavarde/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.8.12 (default, Sep 16 2021, 10:46:05) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
  jinja version = 2.10.3
  libyaml = True
```


### Configuration

```console
# if using a version older than ansible-core 2.12 you should omit the '-t all'
$ ansible-config dump --only-changed -t all
BECOME:
======

CACHE:
=====

CALLBACK:
========

CLICONF:
=======

CONNECTION:
==========

HTTPAPI:
=======

INVENTORY:
=========

LOOKUP:
======

NETCONF:
=======

SHELL:
=====

VARS:
====
```


### OS / Environment

RHEL 8

### Steps to Reproduce

```
ansible -m ansible.builtin.copy -a 'src=/dev/null dest=/tmp/xxx remote_src=true' localhost -b
touch /tmp/xxx
ansible -m ansible.builtin.copy -a 'src=/dev/null dest=/tmp/xxx remote_src=true' localhost -b
```


### Expected Results

I expected the target file to be emptied by copy (similarly to what `cp /dev/null somefile` does). This works also if the _target_ file pre-exists and I call the command _without_ become.

### Actual Results

```console
$ ansible -m ansible.builtin.copy -a 'src=/dev/null dest=/tmp/xxx remote_src=true' localhost -b
localhost | FAILED! => {
    "changed": false,
    "msg": "path /tmp/xxx does not exist",
    "path": "/tmp/xxx"
}
$ touch /tmp/xxx
$ ansible -m ansible.builtin.copy -a 'src=/dev/null dest=/tmp/xxx remote_src=true' localhost -b
[WARNING]: Error deleting remote temporary files (rc: 1, stderr: /bin/sh: /dev/null: Permission denied })
Process WorkerProcess-1:
localhost | CHANGED => {
    "changed": true,
    "checksum": null,
    "dest": "/tmp/xxx",
    "gid": 1000,
    "group": "elavarde",
    "md5sum": null,
    "mode": "0664",
    "owner": "elavarde",
    "secontext": "unconfined_u:object_r:user_tmp_t:s0",
    "size": 0,
    "src": "/dev/null",
    "state": "file",
    "uid": 1000
}
Traceback (most recent call last):
  File "/usr/lib64/python3.8/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/usr/lib/python3.8/site-packages/ansible/executor/process/worker.py", line 138, in run
    sys.stdout = sys.stderr = open(os.devnull, 'w')
PermissionError: [Errno 13] Permission denied: '/dev/null'
$ ls -la /dev/null
ls: cannot access '/dev/null': No such file or directory
```
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
import errno
import filecmp
import grp
import os
import os.path
import platform
import pwd
import shutil
import stat
import tempfile
import traceback
from ansible.module_utils._text import to_bytes, to_native
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.common.process import get_bin_path
from ansible.module_utils.common.locale import get_best_parsable_locale
from ansible.module_utils.six import PY3
module = None
class AnsibleModuleError(Exception):
    def __init__(self, results):
        self.results = results
def clear_facls(path):
    setfacl = get_bin_path('setfacl')
    
    acl_command = [setfacl, '-b', path]
    b_acl_command = [to_bytes(x) for x in acl_command]
    locale = get_best_parsable_locale(module)
    rc, out, err = module.run_command(b_acl_command, environ_update=dict(LANG=locale, LC_ALL=locale, LC_MESSAGES=locale))
    if rc != 0:
        raise RuntimeError('Error running "{0}": stdout: "{1}"; stderr: "{2}"'.format(' '.join(b_acl_command), out, err))
def split_pre_existing_dir(dirname):