@devxiyang/agent-skill 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/package.json +1 -1
- package/skills/jq/SKILL.md +109 -0
- package/skills/jq/references/install.md +38 -0
- package/skills/python/SKILL.md +151 -0
- package/skills/python/references/install.md +52 -0
- package/skills/shell/SKILL.md +218 -0
package/README.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# agent.skill
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/@devxiyang/agent-skill)
|
|
4
|
+
[](https://www.npmjs.com/package/@devxiyang/agent-skill)
|
|
5
|
+
[](https://www.npmjs.com/package/@devxiyang/agent-skill)
|
|
6
|
+
[](./LICENSE)
|
|
7
|
+
|
|
3
8
|
SDK for skill discovery and registration — integrates into any agent.
|
|
4
9
|
|
|
5
10
|
A **skill** is a folder containing a `SKILL.md` file (with YAML frontmatter + instructions) and optional resources (scripts, references, assets). This SDK provides the tooling to discover, validate, and load skills into an agent's context.
|
package/package.json
CHANGED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jq
|
|
3
|
+
description: Process and transform JSON data using jq. Use when filtering API responses, extracting fields, reshaping JSON, or querying structured data.
|
|
4
|
+
requires: bin:jq
|
|
5
|
+
tags: json,jq
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# jq Skill
|
|
9
|
+
|
|
10
|
+
## Preflight
|
|
11
|
+
|
|
12
|
+
Verify jq is available before proceeding:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
jq --version
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
If missing, load `references/install.md` for installation instructions.
|
|
19
|
+
|
|
20
|
+
## Basic filtering
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Pretty-print JSON
|
|
24
|
+
cat data.json | jq .
|
|
25
|
+
|
|
26
|
+
# Extract a field
|
|
27
|
+
echo '{"name":"alice","age":30}' | jq '.name'
|
|
28
|
+
|
|
29
|
+
# Nested field
|
|
30
|
+
echo '{"user":{"email":"a@b.com"}}' | jq '.user.email'
|
|
31
|
+
|
|
32
|
+
# Array index
|
|
33
|
+
echo '[1,2,3]' | jq '.[0]'
|
|
34
|
+
|
|
35
|
+
# Array slice
|
|
36
|
+
echo '[1,2,3,4,5]' | jq '.[2:4]'
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Iterating arrays
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Iterate all elements
|
|
43
|
+
curl -s "https://api.example.com/users" | jq '.[]'
|
|
44
|
+
|
|
45
|
+
# Extract field from each element
|
|
46
|
+
curl -s "https://api.example.com/users" | jq '.[].name'
|
|
47
|
+
|
|
48
|
+
# Same with pipe
|
|
49
|
+
curl -s "https://api.example.com/users" | jq '.[] | .name'
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Selecting & filtering
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Filter array by condition
|
|
56
|
+
jq '[.[] | select(.age > 25)]' data.json
|
|
57
|
+
|
|
58
|
+
# Filter by string match
|
|
59
|
+
jq '[.[] | select(.status == "active")]' data.json
|
|
60
|
+
|
|
61
|
+
# Filter by field existence
|
|
62
|
+
jq '[.[] | select(.email != null)]' data.json
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Transforming
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Build a new object
|
|
69
|
+
jq '{id: .id, label: .name}' data.json
|
|
70
|
+
|
|
71
|
+
# Map over array
|
|
72
|
+
jq '[.[] | {id: .id, label: .name}]' data.json
|
|
73
|
+
|
|
74
|
+
# Append a field
|
|
75
|
+
jq '. + {processed: true}' data.json
|
|
76
|
+
|
|
77
|
+
# keys, values, length
|
|
78
|
+
jq 'keys' data.json
|
|
79
|
+
jq '.items | length' data.json
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## String interpolation
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
jq '.[] | "User \(.name) is \(.age) years old"' data.json
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Combining with curl
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Extract specific field from API response
|
|
92
|
+
curl -s "https://api.example.com/item/1" | jq '.data.title'
|
|
93
|
+
|
|
94
|
+
# Filter and format a list
|
|
95
|
+
curl -s "https://api.example.com/items" | jq '[.[] | select(.active) | {id, name}]'
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Raw output & compact
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Raw string output (no quotes)
|
|
102
|
+
jq -r '.name' data.json
|
|
103
|
+
|
|
104
|
+
# Compact output (no whitespace)
|
|
105
|
+
jq -c '.' data.json
|
|
106
|
+
|
|
107
|
+
# Read from file
|
|
108
|
+
jq '.items' data.json
|
|
109
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Installing jq
|
|
2
|
+
|
|
3
|
+
## macOS
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
brew install jq
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
If Homebrew is not installed, download the binary from https://jqlang.github.io/jq/download/ and place it in `/usr/local/bin`.
|
|
10
|
+
|
|
11
|
+
## Windows
|
|
12
|
+
|
|
13
|
+
If winget is available:
|
|
14
|
+
|
|
15
|
+
```powershell
|
|
16
|
+
winget install jqlang.jq
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Download the binary directly from https://jqlang.github.io/jq/download/ — pick `jq-windows-amd64.exe`, rename to `jq.exe`, and add its location to PATH.
|
|
20
|
+
|
|
21
|
+
If Chocolatey is available:
|
|
22
|
+
|
|
23
|
+
```powershell
|
|
24
|
+
choco install jq
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Linux
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Debian/Ubuntu
|
|
31
|
+
sudo apt install jq
|
|
32
|
+
|
|
33
|
+
# Fedora
|
|
34
|
+
sudo dnf install jq
|
|
35
|
+
|
|
36
|
+
# Arch
|
|
37
|
+
sudo pacman -S jq
|
|
38
|
+
```
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: python
|
|
3
|
+
description: Run Python scripts, manage environments, and use common stdlib patterns. Use for scripting, data processing, automation, and general Python development.
|
|
4
|
+
requires: bin:python3
|
|
5
|
+
tags: python,scripting
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Python Skill
|
|
9
|
+
|
|
10
|
+
## Preflight
|
|
11
|
+
|
|
12
|
+
Verify Python is available before proceeding:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
python3 --version
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
If missing, load `references/install.md` for installation instructions.
|
|
19
|
+
|
|
20
|
+
## Running scripts
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
python3 script.py
|
|
24
|
+
python3 script.py arg1 arg2
|
|
25
|
+
python3 -c "print('hello')"
|
|
26
|
+
|
|
27
|
+
# Run a module
|
|
28
|
+
python3 -m http.server 8000
|
|
29
|
+
python3 -m json.tool data.json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Virtual environments
|
|
33
|
+
|
|
34
|
+
### venv (built-in)
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Create
|
|
38
|
+
python3 -m venv .venv
|
|
39
|
+
|
|
40
|
+
# Activate
|
|
41
|
+
source .venv/bin/activate # macOS/Linux
|
|
42
|
+
.venv\Scripts\activate # Windows
|
|
43
|
+
|
|
44
|
+
# Deactivate
|
|
45
|
+
deactivate
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### uv (fast, recommended)
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Install uv
|
|
52
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS/Linux
|
|
53
|
+
powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows
|
|
54
|
+
|
|
55
|
+
# Create and activate venv
|
|
56
|
+
uv venv
|
|
57
|
+
source .venv/bin/activate
|
|
58
|
+
|
|
59
|
+
# Run without activating
|
|
60
|
+
uv run script.py
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Package management
|
|
64
|
+
|
|
65
|
+
### pip
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
pip install requests
|
|
69
|
+
pip install -r requirements.txt
|
|
70
|
+
pip freeze > requirements.txt
|
|
71
|
+
pip list --outdated
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### uv (faster alternative)
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
uv pip install requests
|
|
78
|
+
uv pip install -r requirements.txt
|
|
79
|
+
uv pip freeze > requirements.txt
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Common stdlib patterns
|
|
83
|
+
|
|
84
|
+
### File I/O (pathlib)
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
from pathlib import Path
|
|
88
|
+
|
|
89
|
+
p = Path("data/file.txt")
|
|
90
|
+
text = p.read_text()
|
|
91
|
+
p.write_text("content")
|
|
92
|
+
|
|
93
|
+
# Iterate files
|
|
94
|
+
for f in Path("src").rglob("*.py"):
|
|
95
|
+
print(f)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### JSON
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
import json
|
|
102
|
+
|
|
103
|
+
# Parse
|
|
104
|
+
data = json.loads('{"key": "value"}')
|
|
105
|
+
data = json.load(open("data.json"))
|
|
106
|
+
|
|
107
|
+
# Serialize
|
|
108
|
+
json.dumps(data, indent=2)
|
|
109
|
+
json.dump(data, open("out.json", "w"), indent=2)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### HTTP requests
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
# Built-in (no deps)
|
|
116
|
+
from urllib.request import urlopen
|
|
117
|
+
import json
|
|
118
|
+
|
|
119
|
+
with urlopen("https://api.example.com/data") as r:
|
|
120
|
+
data = json.loads(r.read())
|
|
121
|
+
|
|
122
|
+
# With requests (install first)
|
|
123
|
+
import requests
|
|
124
|
+
r = requests.get("https://api.example.com/data")
|
|
125
|
+
data = r.json()
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Subprocess
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
import subprocess
|
|
132
|
+
|
|
133
|
+
# Run and capture output
|
|
134
|
+
result = subprocess.run(["git", "status"], capture_output=True, text=True)
|
|
135
|
+
print(result.stdout)
|
|
136
|
+
|
|
137
|
+
# Check for errors
|
|
138
|
+
result = subprocess.run(["npm", "test"], check=True)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Argument parsing
|
|
142
|
+
|
|
143
|
+
```python
|
|
144
|
+
import argparse
|
|
145
|
+
|
|
146
|
+
parser = argparse.ArgumentParser(description="My script")
|
|
147
|
+
parser.add_argument("input", help="Input file")
|
|
148
|
+
parser.add_argument("--output", "-o", default="out.txt")
|
|
149
|
+
parser.add_argument("--verbose", "-v", action="store_true")
|
|
150
|
+
args = parser.parse_args()
|
|
151
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Installing Python
|
|
2
|
+
|
|
3
|
+
## macOS
|
|
4
|
+
|
|
5
|
+
macOS ships with Python 3 from Xcode Command Line Tools:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
xcode-select --install
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
To get a newer version, download from https://www.python.org/downloads/mac-osx/ and run the `.pkg` installer — no Homebrew needed.
|
|
12
|
+
|
|
13
|
+
If you have Homebrew:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
brew install python3
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Windows
|
|
20
|
+
|
|
21
|
+
Download the installer from https://www.python.org/downloads/windows/ — pick the latest stable release and run the `.exe` installer. Check "Add Python to PATH" during installation.
|
|
22
|
+
|
|
23
|
+
If winget is available:
|
|
24
|
+
|
|
25
|
+
```powershell
|
|
26
|
+
winget install Python.Python.3
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Linux
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Debian/Ubuntu
|
|
33
|
+
sudo apt update && sudo apt install python3 python3-pip python3-venv
|
|
34
|
+
|
|
35
|
+
# Fedora
|
|
36
|
+
sudo dnf install python3 python3-pip
|
|
37
|
+
|
|
38
|
+
# Arch
|
|
39
|
+
sudo pacman -S python
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## uv (optional, fast package manager)
|
|
43
|
+
|
|
44
|
+
uv is a fast Python package and environment manager. Install it separately:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# macOS/Linux
|
|
48
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
49
|
+
|
|
50
|
+
# Windows
|
|
51
|
+
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
|
|
52
|
+
```
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: shell
|
|
3
|
+
description: Write and run shell scripts. Use for automation, file operations, pipelines, and system tasks. Covers bash/zsh (macOS/Linux) and PowerShell (Windows).
|
|
4
|
+
tags: shell,cli
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Shell Skill
|
|
8
|
+
|
|
9
|
+
## Unix (bash/zsh)
|
|
10
|
+
|
|
11
|
+
### Variables & strings
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
name="alice"
|
|
15
|
+
echo "Hello, $name"
|
|
16
|
+
echo "Home is ${HOME}"
|
|
17
|
+
|
|
18
|
+
# Command substitution
|
|
19
|
+
files=$(ls -1 | wc -l)
|
|
20
|
+
today=$(date +%Y-%m-%d)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Conditionals
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
if [ -f "file.txt" ]; then
|
|
27
|
+
echo "exists"
|
|
28
|
+
elif [ -d "dir" ]; then
|
|
29
|
+
echo "is a directory"
|
|
30
|
+
else
|
|
31
|
+
echo "not found"
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
# One-liner
|
|
35
|
+
[ -f "file.txt" ] && echo "exists" || echo "missing"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Loops
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Over a list
|
|
42
|
+
for name in alice bob carol; do
|
|
43
|
+
echo "Hello, $name"
|
|
44
|
+
done
|
|
45
|
+
|
|
46
|
+
# Over files
|
|
47
|
+
for f in *.log; do
|
|
48
|
+
echo "Processing $f"
|
|
49
|
+
done
|
|
50
|
+
|
|
51
|
+
# While loop
|
|
52
|
+
while IFS= read -r line; do
|
|
53
|
+
echo "$line"
|
|
54
|
+
done < input.txt
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Functions
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
greet() {
|
|
61
|
+
local name="$1"
|
|
62
|
+
echo "Hello, $name"
|
|
63
|
+
}
|
|
64
|
+
greet "alice"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Pipes & redirection
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Pipe output
|
|
71
|
+
cat file.txt | grep "error" | sort | uniq -c
|
|
72
|
+
|
|
73
|
+
# Redirect stdout
|
|
74
|
+
echo "log" >> output.log
|
|
75
|
+
|
|
76
|
+
# Redirect stderr
|
|
77
|
+
command 2>> errors.log
|
|
78
|
+
|
|
79
|
+
# Redirect both
|
|
80
|
+
command > output.log 2>&1
|
|
81
|
+
|
|
82
|
+
# Discard output
|
|
83
|
+
command > /dev/null 2>&1
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Error handling
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Exit on first error
|
|
90
|
+
set -e
|
|
91
|
+
|
|
92
|
+
# Exit on unset variable
|
|
93
|
+
set -u
|
|
94
|
+
|
|
95
|
+
# Catch pipe failures
|
|
96
|
+
set -o pipefail
|
|
97
|
+
|
|
98
|
+
# Combine (recommended for scripts)
|
|
99
|
+
set -euo pipefail
|
|
100
|
+
|
|
101
|
+
# Check exit code
|
|
102
|
+
if ! command; then
|
|
103
|
+
echo "command failed"
|
|
104
|
+
fi
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Useful patterns
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Find files by name
|
|
111
|
+
find . -name "*.log" -type f
|
|
112
|
+
|
|
113
|
+
# Find and delete
|
|
114
|
+
find . -name "*.tmp" -type f -delete
|
|
115
|
+
|
|
116
|
+
# Find and execute
|
|
117
|
+
find . -name "*.js" -exec wc -l {} +
|
|
118
|
+
|
|
119
|
+
# Filter with grep
|
|
120
|
+
grep -r "TODO" src/ --include="*.ts"
|
|
121
|
+
|
|
122
|
+
# Transform with awk
|
|
123
|
+
awk '{print $1, $3}' data.txt
|
|
124
|
+
|
|
125
|
+
# Process with xargs
|
|
126
|
+
find . -name "*.log" | xargs rm -f
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Windows (PowerShell)
|
|
132
|
+
|
|
133
|
+
### Variables & strings
|
|
134
|
+
|
|
135
|
+
```powershell
|
|
136
|
+
$name = "alice"
|
|
137
|
+
Write-Output "Hello, $name"
|
|
138
|
+
|
|
139
|
+
# Command substitution
|
|
140
|
+
$files = (Get-ChildItem).Count
|
|
141
|
+
$today = Get-Date -Format "yyyy-MM-dd"
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Conditionals
|
|
145
|
+
|
|
146
|
+
```powershell
|
|
147
|
+
if (Test-Path "file.txt") {
|
|
148
|
+
Write-Output "exists"
|
|
149
|
+
} elseif (Test-Path "dir" -PathType Container) {
|
|
150
|
+
Write-Output "is a directory"
|
|
151
|
+
} else {
|
|
152
|
+
Write-Output "not found"
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Loops
|
|
157
|
+
|
|
158
|
+
```powershell
|
|
159
|
+
# Over a list
|
|
160
|
+
foreach ($name in "alice", "bob", "carol") {
|
|
161
|
+
Write-Output "Hello, $name"
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
# Over files
|
|
165
|
+
Get-ChildItem *.log | ForEach-Object {
|
|
166
|
+
Write-Output "Processing $($_.Name)"
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Functions
|
|
171
|
+
|
|
172
|
+
```powershell
|
|
173
|
+
function Greet {
|
|
174
|
+
param($Name)
|
|
175
|
+
Write-Output "Hello, $Name"
|
|
176
|
+
}
|
|
177
|
+
Greet "alice"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Pipes & redirection
|
|
181
|
+
|
|
182
|
+
```powershell
|
|
183
|
+
# Pipe objects
|
|
184
|
+
Get-Content file.txt | Select-String "error" | Sort-Object | Get-Unique
|
|
185
|
+
|
|
186
|
+
# Redirect to file
|
|
187
|
+
"log" | Out-File -Append output.log
|
|
188
|
+
|
|
189
|
+
# Discard output
|
|
190
|
+
command | Out-Null
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Error handling
|
|
194
|
+
|
|
195
|
+
```powershell
|
|
196
|
+
# Stop on error
|
|
197
|
+
$ErrorActionPreference = "Stop"
|
|
198
|
+
|
|
199
|
+
# Try/catch
|
|
200
|
+
try {
|
|
201
|
+
SomeCommand
|
|
202
|
+
} catch {
|
|
203
|
+
Write-Error "Failed: $_"
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Useful patterns
|
|
208
|
+
|
|
209
|
+
```powershell
|
|
210
|
+
# Find files
|
|
211
|
+
Get-ChildItem -Recurse -Filter "*.log"
|
|
212
|
+
|
|
213
|
+
# Find and delete
|
|
214
|
+
Get-ChildItem -Recurse -Filter "*.tmp" | Remove-Item
|
|
215
|
+
|
|
216
|
+
# Search in files
|
|
217
|
+
Select-String -Path "src\*.ts" -Pattern "TODO"
|
|
218
|
+
```
|