特定のファイルが宛先にすでに存在するかどうかに関係なく、そのファイルを特定の場所にコピーしたい。シェルスクリプトでコピーしようとしていますが、ファイルがコピーされていません。次のコマンドを使用しています
/bin/cp -rf /source/file /destination
しかし、それは機能しません。
使用する
cp -fr /source/file /destination
これでおそらく問題は解決するはずです。
この質問はすでに説明されていますが、次のような小さなスクリプトを書くことができます。
#!/bin/bash
if [ ! -d "$2" ]; then
mkdir -p "$2"
fi
cp -R "$1" "$2"
#!/bin/bash:コンピュータにインタプリタを使用するようbashに指示します。
if [ ! -d "$2" ]; then:指定した2番目の変数がまだ存在しない場合...
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
fi: ifステートメントを閉じます。
cp -R "$1" "$2":指定した最初の変数から指定した2番目の変数のディレクトリにファイルをコピーします。
したがって、を実行した場合script.sh mars pluto、marsは最初の変数($1)にplutoなり、2番目の変数($2)になります。
フラグは、-Rこれを再帰的に実行することを意味するため、cpコマンドは最初の変数からすべてのファイルとフォルダーを調べ、それらを2番目の変数のディレクトリにコピーします。
問題は、デフォルトでシステムに作成されたcpコマンドのエイリアスが原因である可能性があります(「エイリアス」と入力すると、すべてのエイリアスを表示できます)。たとえば、私のシステムにはデフォルトで次のalisがあります。aliascp ='cp -i'、ここで-iは-fオプションをオーバーライドします。つまり、cpは常に上書き確認を求めます。
このような場合に必要なのは(エイリアスがなくても実際に機能する)、その確認に「はい」を入力することです。これを行うには、cpコマンドを次のように変更するだけです。
はい| cp / source / file / destination
/ bin / cp -rfsrcdstまたは/usr/ bin / env cp -rf