フルパスを再入力せずに「所定の位置に」ネストされたパスのファイル名を変更するにはどうすればよいですか? [コピー]

フルパスを再入力せずに「所定の位置に」ネストされたパスのファイル名を変更するにはどうすればよいですか? [コピー]

mv深いディレクトリにある他のファイルの名前を変更する必要があることがよくあります。

mv /a/long/path/to/a/file.txt /a/long/path/to/a/file.txt.bak

しかし、フルパス名を再入力したくありません。使用できる簡単な略語やエイリアスはありますか?つまり:

$ mv /a/long/path/to/a/file.txt file.txt.bak
$ ls /a/long/path/to/a/file.txt.bak
a/long/path/to/a/file.txt.bak

(注:これは、異なる時間に別のディレクトリにある単純な単一ファイルの名前を変更するためのものです。一括名前の変更)

答え1

使う支柱の拡張:

mv /a/long/path/to/a/file.txt{,.bak}

これにより、/a/long/path/to/a/file.txt空のサフィックスの名前が/a/long/path/to/a/file.txtwith suffixに変更されます.bak

答え2

おそらく図のように中括弧拡張を使用します。フレディの答え、どちらも対話式を使用bashできますzsh歴史的拡張、インジケーターを使用して、#$現在の行でこれまでに入力した最後の単語を示します。

mv /a/long/path/to/a/file.txt !#$.bak

答え3

基本的な質問かもしれませんが、既存の質問/回答が見つかりません。私が作った簡単な解決策は~./bash_functions次の機能です。

#/home/user/.bash_functions

function mv-rn() {
  mv $1 $(dirname $1)/${2}
}

だから今:

$ mv-rn /a/long/path/to/a/file.txt file.txt.bak
$ ls /a/long/path/to/a/file.txt.bak
a/long/path/to/a/file.txt.bak

(**注、上記の関数がエイリアスとして認識されるようにするには、〜/ .bashrcにそれを含める必要があります。)

# Function definitions.
if [ -f ~/.bash_functions ]; then
    . ~/.bash_functions
fi

答え4

(cd /a/long/path/to/a && mv file.txt file.txt.bak)

&&cdが成功した場合にのみmvが実行されることを確認してください。角かっこはコマンドがサブシェルで実行されることを意味するので、cdは既存のシェルの作業ディレクトリを変更しません。

関連情報