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