Copy and overwrite a file in shell script

后端 未结 4 2020
醉梦人生
醉梦人生 2021-02-07 16:29

I want to copy a certain file to a location, irrespective of that file already exists in the destination or not. I\'m trying to copy through shell script.But the file is not get

相关标签:
4条回答
  • 2021-02-07 16:44

    This question has been already discussed, however you can write a little script like this:

    #!/bin/bash
    if [ ! -d "$2" ]; then
      mkdir -p "$2"
    fi
    cp -R "$1" "$2"
    

    Explaining this script a little bit

    1. #!/bin/bash: tells your computer to use the bash interpreter.

    2. if [ ! -d "$2" ]; then: If the second variable you supplied does not already exist...

    3. mkdir -p "$2": make that directory, including any parent directories supplied in the path.

      Running mkdir -p one/two/three will make:

      $ mkdir -p one/two/three
      $ tree one
      one/
      └── two
          └── three
      

      If you don't supply the -p tag then you'll get an error if directories one and two don't exist:

      $ mkdir one/two/three
      mkdir: cannot create directory ‘one/two/three’: No such file or directory
      
    4. fi: Closes the if statement.

    5. cp -R "$1" "$2": copies files from the first variable you supplied to the directory of the second variable you supplied.

      So if you ran script.sh mars pluto, mars would be the first variable ($1) and pluto would be the second variable ($2).

      The -R flag means it does this recursively, so the cp command will go through all the files and folders from your first variable, and copy them to the directory of your second variable.

    0 讨论(0)
  • 2021-02-07 16:50

    /bin/cp -rf src dst or /usr/bin/env cp -rf

    0 讨论(0)
  • 2021-02-07 16:55

    Use

    cp -fr /source/file /destination
    

    this should probably solve the problem.

    0 讨论(0)
  • 2021-02-07 16:58

    Your problem might be caused by an alias for cp command created in your system by default (you can see al your aliases by typing "alias"). For example, my system has the following alis by default: alias cp='cp -i', where -i overrides -f option, i.e. cp will always prompt for overwriting confirmation.

    What you need in such case (that'll actually work even if you don't have an alias) is to feed "yes" to that confirmation. To do that simply modify your cp command to look like this:

    yes | cp /source/file /destination

    0 讨论(0)
提交回复
热议问题