私のワークフローには次のような典型的な問題があります。まだ作成されていないディレクトリにいくつかのファイルをコピーします。ほとんどの場合、私はこの方法でそれを実行します。コマンド展開でディレクトリを作成する:引用問題
cp *.JPG /some/path/[oops, I recalled that the directory does not exist, ^C]
mkdir /some/path/newdir
cp *.JPG /some/path/newdir
これを避けるために、私はディレクトリを作成し、そのパスを返しmd
と呼ばれるスクリプトを作成:
#!/bin/sh
mkdir -p "$*"
echo "$*"
その後、私のワークフローは次のようになりますが
cp *.JPG `md /some/path/newdir`<TAB><ENTER>
<TAB>
を押すと、md
が実行され、ディレクトリが作成され、そのパスでバッククォートに置き換えられますn <ENTER>
を押してcp
を実行します。
新しいディレクトリのパスに空白がない限り、すべて正常に動作します。その場合、展開後、コマンドラインにエスケープされていないスペースがあります。
私は(md
で)このような引用符でパスを置くことによってこれを克服しようとした:
echo "'$*'"
しかし、この場合に拡張した後、私は引用符をエスケープしています
cp *.JPG \'/Users/user/temp/one two three\'
がいずれかがありますzshのコマンド拡張に関する引用符の逃げを避ける方法はありますか?私は$()
と異なるタイプの引用符('
の代わりに"
)を試しましたが、何も動作しません。もちろん
、私はこの方法でそれを行うことができます。
cp *.JPG "`md /path/with spaces`"
しかし、私は、可能な場合、キーストロークのカップルを保存したいです。
はあなただけ最初に対象ディレクトリを作成し、 'mdcp'を作ることによって、その周りに働いて考えがあります?バックティックでなくても、引用符を使用する必要はありません。 (複数のコマンドで動作させたい場合は、代わりに 'md cp ..'や' md mv'を実行し、コマンドを実行する前に最後のパラメータを作成することができます) –
@thatotherguy良いアイデア、引用符の問題を解決することはできません... –
おそらく 'rsync * .jpg/some/new/dir /'でしょうか? 'rsync'が存在しなければ' rsync'はコピー先のディレクトリを作成します... – twalberg