ブレース拡張はいつ使用しますか?

ブレース拡張とは何か理解していますが、最善の方法がわかりません使用してください。

いつ使用しますか?
ヒントがあれば、便利で注目に値する例をいくつか教えてください。

回答

中括弧の展開は、パス名が長い場合に非常に便利です。ファイルをバックアップする簡単な方法として使用します

cp /a/really/long/path/to/some/file.txt{,.bak} 

/a/really/long/path/to/some/file.txt

シーケンスでも使用できます。ウェブからたくさんのページをダウンロードする:

wget http://domain.com/book/page{1..5}.html 

または

for i in {1..100} do #do something 100 times done 

コメント

  • これは引数の複製にも使用できます。' -f すべての引数操作するファイル。 program -f file1 -f file2 -f file3を実行する代わりに、program "-f file"{1..3}
  • を実行できます。これは残念です。私はそれを発見したばかりですが、rhisを知らずに何年もの間非常に長いパスでバックアップを行います。ありがとう。
  • @Patrick:programが6ではなく"-f file1" "-f file2" "-f file3"の3つの単語を取得するため、失敗します:"-f" "file1" "-f" "file2" "-f" "file3"
  • @dogbane:forループで使用するために拡張を使用することは、次のように記述できるため、少し意味がありません。 div id = “e352bf8646″>

より効率的です。

回答

中括弧の拡張大規模なディレクトリ構造を作成する場合に非常に便利です:

mkdir -p dir1/{subdir1,subdir2}/{subsubdir1,subsubdir2} 

これにより

find dir1 -type d dir1 dir1/subdir1 dir1/subdir1/subsubdir1 dir1/subdir1/subsubdir2 dir1/subdir2 dir1/subdir2/subsubdir1 dir1/subdir2/subsubdir2 

さらに一歩進んで、ブレース拡張をブレース拡張に入れることもできます:

mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}} 

これにより、上記の例と同じディレクトリ構造が得られます。

コメント

  • ネストは便利ですが、ネストの例(mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}})は'実際にはどのような目的にも役立ちません。 mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
  • @iconoclast、subdir1を解釈すると、目的を果たします。非リテラルの意味でのsubdir2subdir1catに置き換え、subdir2dog
  • @ephsmith:" subdir1 "を

cat "および" subdir2 " for " dog "の場合、subdir {1,2}を使用し、置き換えることができる文字列がないため、ネストの例は失敗します" subdir "を使用すると、subdir {1,2}は{cat、dog}を返します。

回答

入力を減らしたいときに使用します:

geany /path/to/file1 /path/to/file2 # versus geany /path/to/file{1,2} 

別の例:

wajig install libpam0g-dev libiw-dev libdb-dev # versus wajig install lib{pam0g,iw,db}-dev 

回答

実際の比較に使用します開発中にテスト出力を目的のテスト出力に変換します。テスト#41が失敗した場合、テスト出力(ファイルtests.output / 041内)と目的の出力(ファイルtests.out / 041内)の違いを簡単に確認できます。

$ diff tests.{out,output}/041 

回答

よくあるケースは次のとおりです。

名前の変更:

mv myText.{txt,tex} 

または

mv myText.tex{,.old} 

または

cp myText.tex{,.backup} 

(最後の2つのタスクにバージョン管理を使用するのはそれほど面倒ではありませんが)

比較用(すでに説明済み):

diff path{1,2}/a.txt 

回答

ここにはいくつかのすばらしい回答がありますが、 not ブレース拡張を使用します。他の回答者と同様に、私はコマンドラインで中括弧拡張をかなり使用しています。スマートシェルが期待できるので、エイリアスや関数でも使用しています。

シェルスクリプトでは使用しません()(スクリプトに他の理由がない限り) bashまたはzshである必要がありますが、そのような場合は、perlpythonなどの「実際の」スクリプト言語にアップグレードするのが最善です。 )。 ブレース拡張は移植性がありません POSIXシェル標準。 /bin/sh shebang のシェルスクリプトで機能する場合でも、より多くのストリップが適用されたシステムでは機能しません/bin/shシェル(例:dash)。

1桁の違いの場合、中括弧を拡張する必要はありません。文字クラスで十分です:

バシズム:

diff file{1,2} 

ポータブル:

diff file[12] 

コメント

  • 違いはfile{1,2}は常にfile1 file2に展開されますが、file[12]は既存のファイル名にのみ展開されます。 file1が存在するが、file2が存在しない場合' t、file[12]file1のみに展開されます。[]拡張は実際には?展開("パス名展開"と呼ばれます。
  • 正しい、中括弧の展開はシェルグロブ(別名パス名拡張)。'これは

まだ実際には言及されていません。ブレースの拡張は、予期せずパスがないことに気付くのに適しています。ブレース拡張内でグロブすることもできます。

回答

非常に大きなファイルをで分割した後

split -b 100m hugeFile.zip part. 

262個に分割されたとしましょう。つまり、part.aapart.abpart.acpart.kb

ブレース拡張このように

cat part.{{a..j}{a..z},k{a..b}} > hugeFile.zip 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です