web-dev-qa-db-ja.com

完全なパスなしでフォルダと親フォルダ間でコピーする方法

これは基本的な質問ですが、私はまともな解決策を見つけるのに苦労しています。これは私のスクリプトの自動化を妨げています。

私は次の道を歩んでいます。

/home/hassan/Dyna/ProjectSimulation

プロジェクトシミュレーションでは、3つのフォルダーがあります

friction time force

お気に入り

/home/hassan/Dyna/ProjectSimulation/friction

これで、この摩擦フォルダーにファイルfriction1.txtがあり、それをProjectSimulationにコピーしたいと思います。

完全なパスと1つ下のステップを回避することは可能ですか?

また、このfriction1.txtをfolder forceにコピーする必要がある場合でも、完全なパスを回避する方法はありますか。

つまり、サブルーチンがありますが、これはパスに依存します。実行するたびに、同じフォルダーで実行してから結果をコピーして、シミュレーションのインスタンスを1つだけ実行できるようにする必要があります。

専門家が案内してください。

PS:これは600行のシェルの一部です。

12
hamad khan

これは非常に基本的なことであるため、私はあなたの質問で何かを誤解したに違いありません。

親ディレクトリを参照する場合は、..はそれを行う方法です。したがって、friction1.txtを2つの場所にコピーする場合は、

cp friction1.txt ..
cp friction1.txt ../force

あなたが世話をする必要があるのは、CWDが

/home/hassan/Dyna/ProjectSimulation/friction

参照が正しい場所を指すようにします。

13
HonkyTonk

既知のディレクトリ構造のルートディレクトリに変更します。次に、相対パスを使用してコピー操作を実行します。次に、元のディレクトリに戻ります。

あなたの友達は:

cd
cd -

以上:

pushd
popd

(man bashを参照)

つまり.

pushd /home/hassan/Dyna/ProjectSimulation
cp friction/friction1.txt .
cp friction/friction1.txt force
popd
0
stolzem

現在のディレクトリを一時的にProjectSimulationに変更し、ファイルをコピーすることができます(cp friction/friction1.txt .)次に、パスを元に戻します(スクリプトの残りの部分は以前と同じように機能します)

または、 dirname を使用して親ディレクトリの名前を取得し、それを使用することもできます。

0
Attila