mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 23:28:02 +00:00
Add Type Fewer Paths With Brace Expansion as a Unix TIL
This commit is contained in:
49
unix/type-fewer-paths-with-brace-expansion.md
Normal file
49
unix/type-fewer-paths-with-brace-expansion.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# Type Fewer Paths With Brace Expansion
|
||||
|
||||
Bash has a feature called _brace expansion_ that allows us to do a kind of
|
||||
shorthand when writing out file paths. We can specify multiple variants
|
||||
comma-separated between curly braces and they'll each be expanded into separate
|
||||
arguments.
|
||||
|
||||
It's easier to understand this by seeing it. If we type the following (don't
|
||||
hit `Enter` yet):
|
||||
|
||||
```bash
|
||||
$ mkdir src/{one,two,three}
|
||||
```
|
||||
|
||||
And then hit _Tab_:
|
||||
|
||||
```bash
|
||||
$ mkdir src/one src/two src/three
|
||||
```
|
||||
|
||||
Bash uses the portion in braces to expand into separate arguments. The part
|
||||
outside the braces gets reused for each. That's where we get some savings from
|
||||
typing out the same path each time.
|
||||
|
||||
Here is another example where we use `mv` to rename a file deeply nested in our
|
||||
project:
|
||||
|
||||
```bash
|
||||
$ mv projects/project1/src/app/utils/{names,constants}.js
|
||||
```
|
||||
|
||||
We don't even have to _Tab_ it out. We can hit _Enter_ directly and `mv` gets
|
||||
both arguments.
|
||||
|
||||
Similarly, how about we change the extension of our renamed file:
|
||||
|
||||
```bash
|
||||
$ mv projects/project1/src/app/utils/constants.{js,ts}
|
||||
```
|
||||
|
||||
I've always found this feature most useful with paths and filenames, but you
|
||||
can do brace expansion with any arguments.
|
||||
|
||||
```bash
|
||||
$ echo 1{3,1,6,4,9,2,7,5}
|
||||
13 11 16 14 19 12 17 15
|
||||
```
|
||||
|
||||
[source](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html)
|
||||
Reference in New Issue
Block a user