跳转到内容

Shell:常用脚本和指令

本文汇总记录一些各个平台上的常用脚本和指令

Terminal window
# 反向连接文件到一个
# $(ls -r): 按文件名倒序(z-a)列出当前目录下所有文件
# cat $i >> new.md: 将每个文件内容追加写入 new.md
for i in $(ls -r); do cat $i >> new.md; done;
Terminal window
# 将.png结尾的文件名改为 .jpg
# ls | cut -d '.' -f 1: 列出文件并用'.'分割,取文件名部分(不含扩展名)
# xargs -I {1}: 将前一步的输出作为参数传递给 mv 命令
ls | cut -d '.' -f 1 | xargs -I {1} mv {1}.png {1}.jpg
# 将.jpeg结尾的文件名改为.jpg(${x%.jpeg} 去掉扩展名再拼接新扩展名)
for x in *.jpeg; do mv "$x" "${x%.jpeg}.jpg"; done
Terminal window
# 获取当前工作目录路径
$PWD = Get-Location
# 删除当前目录下所有旧的 .dll 文件
Write-Output "Rove dll"
Remove-Item *.dll
# 分别用 C# 和 VB 编译器将源码编译为 .dll 类库
Write-Output "Build Dll"
csc /t:library .\JskyLib.cs
vbc /t:library .\JskyLib-vb.vb
# 通过反射(Reflection)动态加载刚编译好的 DLL 文件
[Reflection.Assembly]::LoadFile("$PWD\JskyLib.dll")
[Reflection.Assembly]::LoadFile("$PWD\JskyLib-vb.dll")
# 调用已加载的 JskyLib.Math 类中的 Sum 方法,计算 1+2
Write-Output "Using JskyLib.Math"
[System.Console]::Write("`n`n1 + 2 = ")
[JskyLib.Math]::Sum(1, 2)
# 调用 JskyLibVB.MathVB 类中的 Version 方法,输出版本信息
Write-Output "Using JskyLibVB.MathVB"
[System.Console]::Write("`n`nPrint Version Message`n")
[JskyLibVB.MathVB]::Version()
  • OneDrive 删除注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace

  • Create Big File (50MB) fsutil file createnew test.txt 52428800

  • Create Big File (5GB) [System.IO.Path]::GetTempFileName() | % { [System.IO.File]::Create($_).SetLength(5gb).Close;$_ } | ? { $_ }

  • nvidia experience 下载目录 C:\ProgramData\NVIDIA Corporation\Downloader

  • Powershll prompt

# 用记事本打开 PowerShell 配置文件 $PROFILE
notepad $PROFILE
# 自定义 PowerShell 提示符为简洁的 "~: "
function prompt {"~: "}
# 自定义 PowerShell 提示符显示当前目录名,如 "PS blog: "
function prompt { "PS " + $( Get-Location | split-path -leaf ) + ": " }
  • WSL
# 立即终止所有正在运行的 WSL 发行版
wsl --shutdown
# 将指定 WSL 发行版导出为 .tar 文件,用于备份或迁移
wsl --export <Distro> <FileName>
# 从 .tar 文件导入新的 WSL 发行版到指定安装位置
wsl --import <Distro> <InstallLocation> <FileName> [Options]
# 启动指定的 WSL 发行版
wsl --distribution, -d <Distro>
# 将指定发行版设为默认(直接运行 wsl 时启动的发行版)
wsl --set-default, -s <Distro>
# 修改此注册表键的 DefaultUid 值可更改 WSL 默认用户的 UID(1000 对应首个用户)
# \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss DefaultUid Dec 1000
  • apt proxy
# 编辑 apt 的代理配置文件
sudo nano /etc/apt/apt.conf
# 设置 HTTP 代理地址,apt 下载软件包时将走此代理
Acquire::http::Proxy "http://:@192.168.199.229:7890";
# 设置 HTTPS 代理地址,适用于使用 HTTPS 协议的软件源
Acquire::https::Proxy "http://:@192.168.199.229:7890";
  • gem install proxy
# 通过 -p 参数指定 HTTP 代理,使用代理下载并安装 Ruby Gem 包
sudo gem install -p http://127.0.0.1:7890 github-linguist
  • 水平速度、落地夹角已知,求下落速度
# math.radians(10): 将角度制的 10° 转换为弧度制
# math.tan(): 计算正切值,即水平速度分量与下落速度的比值
math.tan(math.radians(10))
# 安装 ImageMagick 图像处理工具
sudo apt install imagemagick
# 编辑安全策略文件(如放宽图片尺寸和内存限制)
sudo vi /etc/ImageMagick-6/policy.xml
# 将当前目录所有 PNG 图片转为 JPG 格式,质量设为 90%
convert *.png -quality 90 *.jpg
# 将当前目录所有 JPG 图片按顺序合并为一个 PDF 文件
convert *.jpg mydoc.pdf
  • 合并视频&音频
# 将视频流(video.mp4)和音频流(audio.wav)合并到 MKV 容器中,-c copy 不重新编码直接复制
ffmpeg -i video.mp4 -i audio.wav -c copy output.mkv
  • Cut
# from to
# -ss 起始时间,-to 结束时间,从 05:10 剪切到 15:30
ffmpeg -i input.mp4 -ss 00:05:10 -to 00:15:30 -c:v copy -c:a copy output2.mp4
# duration
# -ss 起始时间,-t 持续时长,从 05:20 开始剪切 10 分钟
ffmpeg -i input.mp4 -ss 00:05:20 -t 00:10:00 -c:v copy -c:a copy output1.mp4
# draw.io 配置:设置导出图片的最大尺寸和最大字节数限制
{
"maxImageSize": "10000",
"maxImageBytes": "30000000"
}