16

特定のファイルが宛先にすでに存在するかどうかに関係なく、そのファイルを特定の場所にコピーしたい。シェルスクリプトでコピーしようとしていますが、ファイルがコピーされていません。次のコマンドを使用しています

/bin/cp -rf /source/file /destination

しかし、それは機能しません。

4

4 に答える 4

16

使用する

cp -fr /source/file /destination

これでおそらく問題は解決するはずです。

于 2012-12-13T15:05:26.350 に答える
14

この質問はすでに説明されていますが、次のような小さなスクリプトを書くことができます。

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

このスクリプトを少し説明する

  1. #!/bin/bash:コンピュータにインタプリタを使用するようbashに指示します。

  2. if [ ! -d "$2" ]; then:指定した2番目の変数がまだ存在しない場合...

  3. mkdir -p "$2":パスで指定された親ディレクトリを含め、そのディレクトリを作成します。

    実行mkdir -p one/two/threeすると次のようになります。

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

    -pタグを指定しないと、ディレクトリが存在しない場合にエラーが発生しoneますtwo

    $ mkdir one/two/three
    mkdir: cannot create directory ‘one/two/three’: No such file or directory
    
  4. fi: ifステートメントを閉じます。

  5. cp -R "$1" "$2":指定した最初の変数から指定した2番目の変数のディレクトリにファイルをコピーします。

    したがって、を実行した場合script.sh mars plutomarsは最初の変数($1)にplutoなり、2番目の変数($2)になります。

    フラグは、-Rこれを再帰的に実行することを意味するため、cpコマンドは最初の変数からすべてのファイルとフォルダーを調べ、それらを2番目の変数のディレクトリにコピーします。

于 2012-12-13T08:45:58.837 に答える
14

問題は、デフォルトでシステムに作成されたcpコマンドのエイリアスが原因である可能性があります(「エイリアス」と入力すると、すべてのエイリアスを表示できます)。たとえば、私のシステムにはデフォルトで次のalisがあります。aliascp ='cp -i'、ここで-iは-fオプションをオーバーライドします。つまり、cpは常に上書き確認を求めます。

このような場合に必要なのは(エイリアスがなくても実際に機能する)、その確認に「はい」を入力することです。これを行うには、cpコマンドを次のように変更するだけです。

はい| cp / source / file / destination

于 2013-02-16T14:37:00.963 に答える
1

/ bin / cp -rfsrcdstまたは/usr/ bin / env cp -rf

于 2014-03-12T22:22:33.720 に答える