パスが非常に長いファイルがあります。たとえば、次のようになります。
/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番目のファイル名オートコンプリートは機能しません。