移動操作のターゲットにディレクトリを変更します


12

時々、いくつかのファイルを編集して、別のフォルダーに移動したいことがあります。(通常:Dropboxフォルダーに、フォルダーの他の所有者に一定の更新を与えることを避けるために作業したくありませんでした。)たとえば、

mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf

その後、ディレクトリを以前の移動操作のターゲットディレクトリに変更したいことがよくあります。私は自分自身が上矢印をfile.pdf押し、最後を削除し、左を押し、削除するmv file.pdfそれをして置き換えcdます。

これを行うためのより高速でスマートな方法はありますか?「ファイルを移動してからディレクトリを変更」コマンド、最後に使用したディレクトリへのショートカット、またはそのようなものがありますか?


1
あなたはCTRL +左を保持している場合、それが高速である単語で左折します
猫は

シェルの質問に対する答えではなく、サイドコメント:私は通常、編集中はDropboxを一時停止します。また、他のファイルが「自分の足元で」変更されないようにします。
コンスタンチノツァロウハス

回答:


17

bashを使用している場合、その履歴相互作用にはこのためのショートカットがあります。前のコマンドの最後の引数の単語指定子

!!:$
前のコマンドの最後の引数を指定します。これはに短縮される場合があります!$

最後のパス名コンポーネントを削除する修飾子と組み合わせて:

オプションの単語指定子の後に、1つ以上の有効な修飾子のシーケンスを追加できます。各修飾子の前には「:」が付きます。

h
末尾のパス名コンポーネントを削除し、先頭のみを残します。

そう:

$ echo /ab/c/d
/ab/c/d
$ echo !$:h
echo /ab/c
/ab/c

同じショートカットをzshでも使用できます。


1
これはとてもクールです。
オタク長老

4

ファイル名を変更しない場合は、ファイル名を省略できます。mvは自動的に追加します。これは、複数のファイルを移動するときに特に便利です。

mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/

mv *.pdf ../../../Dropbox/sharedfolder/subdirectory/

最後の引数としてディレクトリを使用して、!!:$または!$muruの答えが説明するように使用できます。
通常のデフォルトでbashを使用している場合は、代わりにAlt+ を使用できます.
(これはreadline insert-last-argumentコマンドです。bind -p現在のすべてのバインディングをリストします。)


1
それはすでにexistis場合は宛先ファイル名を省略すると、黙って先のファイルを上書きすることができることに注意してください

mvオプション-i/ --interactiveまたは-n/ を指定しない限り、常に宛先ファイルをサイレントに上書きします--no-clobber。それが私がalias mv='mv -i' cp='cp -i'にいる理由.bashrcです。
デビッドフォースター

-1

別のアプローチは、この目的専用の独自のコマンドを作成することです。これは、次のような関数を介して実行できます。

$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }

ここで、(1) mv-specialは関数名です。(2)変数$1and $2は、コマンドmvandで使用される関数の引数cdです。(3) $(echo $2-) varの文字列の末尾にワイルドキャット文字を追加し、変数にパスのみが含まれる場合の$2動作を修正します。(4)はからのパスのみをフィルタリングします。dirname$2 $(dirname $(echo $2-))$2

この回答によると、関数は次のようになります。

$ function mv-special { mv $1 $2; cd ${2%/*}; }

ここで:${2%/*}からのパスのみをフィルタリングし$2ます。

コマンドとして使用するには、この関数をエクスポートする必要があります。

$ export -f mv-special

使用法:

$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf

または:

$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/

それに注意してください-両方のバリアントについて-2番目の引数($2)はファイル名またはスラッシュ(/)で終わる必要。

新しいコマンドを永続的に使用可能にするには、関数の定義とエクスポートコマンドを以下に追加する必要があります~/.bashrc

# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special

または:

# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special

ここに画像の説明を入力してください


カスタムコマンドを行うことができ、中に配置された実行可能なスクリプトファイル経由~/binかに/usr/sbinどのように私は(スクリプトを実行する)カスタムターミナルコマンドを作成することができますか?しかし、正直に言うと、私が直面したトラブルの動作とcd、このシナリオでは。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.