ターゲットフォルダにファイルをコピーする

ターゲットフォルダにファイルをコピーする

パスが非常に長いファイルがあります。たとえば、次のようになります。

/opt/very/long/path/file1

このディレクトリのファイルをコピーしたいと思います。

cp /opt/very/long/path/file1 /opt/very/long/path/file2

私はこの長い道を繰り返すのを好まない。ターゲットフォルダに移動して、次のファイルをコピーできます。

cd /opt/very/long/path/
cp file1 file2

しかし、ディレクトリを変更したくありません。 1つの理由は、長いパスが多い場合は毎回ディレクトリに入る必要があるからです。

cd /opt/very/long/path/
cp file1 file2
cd /opt/other/very/very/long/path/
cp fileA fileB

別の理由は、コンテキストと明確な履歴を保存したいためです(各コマンドにはコピーされた内容と場所が表示されます)。

したがって、ディレクトリを変更しないことをお勧めします。

cp /opt/very/long/path/file1 /opt/very/long/path/file2
cp /opt/other/very/very/long/path/fileA /opt/other/very/very/long/path/fileB

しかし、私はその道を繰り返さなければなりません。

そんな近道がありますか?

cp /opt/very/long/path/file1 ./file2
cp /opt/other/very/very/long/path/fileA ./fileB

しかし、ドットは.「現在のディレクトリ」を意味します。「ターゲットディレクトリ」または「ソースディレクトリ」を表す文字は何ですか?

cp /opt/very/long/path/file1 <destination>/file2
cp /opt/other/very/very/long/path/fileA <destination>/fileB

答え1

中かっこ拡張は、次の場合に便利です。

cp /opt/other/very/very/long/path/{fileA,fileB}

...次に展開されます。

cp /opt/other/very/very/long/path/fileA /opt/other/very/very/long/path/fileB

実際に実行されたとき。

コマンドは入力と同時に履歴に表示され、パスは保持されます。

$ history
  # ...
  508  cp /opt/other/very/very/long/path/{fileA,fileB}
  509  history

答え2

ログパスで変数を設定し、cpコマンドで変数を使用できます。

例えば

export dir="/opt/very/long/path" 

cp "$dir"/file "$dir"/file2

答え3

2つのフォルダ間で同期するには、rsyncを使用できます。

rsync は、ローカルホストとリモートホスト間の同期にも使用できます。

上記のシナリオでは、localhostで使用されます。

rsync -avzh sourcefolder destinationfolder

答え4

次のように入力できます。

cp /opt/other/very/very/long/path/fileA !#:1:h/fileB

歴史的には次のように拡張されます。

cp /opt/other/very/very/long/path/fileA /opt/other/very/very/long/path/fileB

説明する:

  • !#- 現在の行を取得します。
  • :1- 最初のパラメータを取得します。
  • :h- フォルダのインポート

(ありがとうこの記事)

弱点は次のとおりです。

  • up arrow拡張内容を履歴に保存するため、入力したコマンドを押してインポートすることはできませんが、
  • 2番目のファイル名オートコンプリートは機能しません。

関連情報