フルパスを再入力せずにディレクトリ内の複数のファイルを参照する方法はありますか? [コピー]

フルパスを再入力せずにディレクトリ内の複数のファイルを参照する方法はありますか? [コピー]

Bashシェルから同じディレクトリにある複数のファイルを削除する必要がある場合は、現在次のことを行う必要があります。

rm /some/path/file1 /some/path/file2

/some/path/変数を使用したり作業ディレクトリを変更せずに再入力する必要がないように、これを作成するより短い方法がありますか?

たぶん次のようなものがあります。

rm /some/path/(file1,file2)

答え1

ほぼ完了しました:

rm /some/path/{file1,file2}

でも

rm /some/path/file{1,2}

他のシェルに関連してサポートされているモードは次のとおりです。

rm /some/path/file[12]

最初の2つは、2つの明示的なファイル名引数に展開されます。 3番目は/some/pathすべてのファイルに一致するパターンです。

答え2

あるいは、BashのReadlineライブラリを利用することもできます。これは回避策ですが、比較的簡単に入力できます。

  1. ls /some/path/
  2. rm ESC.file1 ESC.file2

(メタプレフィックスがキーであるESCと仮定します。)

最初のコマンドのextraは、ls履歴のパスを前のコマンドの最後の引数として使用しますESC.(またはマニュアルによると、M-.またはM-_)。

前のコマンドに最後の引数(前の履歴項目の最後の単語)を挿入します。

したがって、実際にはファイル名の前の最後のパスを入力することです。 (参考にしてください末尾のスラッシュls)。

答え3

これらの洞察力のある回答に加えて、ファイルグループを一致させるために使用できるいくつかのパターンがあります。そしてファイル名拡張子そしてパターンマッチング、bashにディレクトリ内のすべてのファイル、任意のものから始まるすべてのファイル、同じ拡張子を持つすべてのファイルなどに一致するように指示できます。

もちろん、rmを使用する場合は、望ましくないものを削除しないように細心の注意を払う必要があります。パスパラメータが表示する内容を一覧表示するには、まずlsを使用することをお勧めします。

以下はいくつかの例です。

  1. ディレクトリ内のすべてのファイルを一致させる場合は、コマンドがrm処理する内容を確認するには、lsアスタリスク(*)グローバル演算子を使用して任意の数の文字を一致させることができます。

    ls /some/path/*
    
  2. あるいは、testで始まるすべてのファイルである可能性があります。

    ls /some/path/test*`
    
  3. すべてtestで始まり、1つの文字と.sh疑問符(?)文字を使用して文字を一致させることができます。

    ls /some/path/test?.sh
    
  4. maxなど9つのファイルtest1.shがあり、これらのテストスクリプトを削除しようとしているとします。あなたも大事にしたいことがあります。 testで始まる文字、1から9までの数字、またはで始まるアルファベット以外の文字を検索できます。文字グループを一致させるために角かっこ()を使用します。test2.shtest9.shtesta.sh.sh[]

    ls /some/path/test[1-9].sh
    ls /some/path/test[!:alpha:].sh
    

これらの一致はかなり簡単にスクリプト化できるため、自動化のためにスクリプト内でファイルを非常に細かく調整したり、広範囲にグループ化したりできます。

答え4

Bashを使用している場合は、M-r次の行を追加して最後のパラメータを繰り返すことができます~/.inputrc

"\er": "!#:$\e^"

!#は現在の行で、$は最後のパラメータ\e^ですhistory-expand-line

関連情報