小编unf*_*nfa的帖子

如何在命令行中将图像转换为 24 位 BMP?

我正在为ARSS编写包装器 Bash 脚本以使其更易于使用。该程序将图像转换为声音,反之亦然,但它只接受 24 位 BMP 图像,到目前为止我只能使用 GIMP 生成。

我正在寻找一种方法将任何给定的图像转换为合适的 BMP 文件,以便 ARSS 可以处理它。我尝试了 ImageMagic 的convert,但我无法获得 24-bt 颜色深度。

这是我的脚本:

#!/bin/bash

# where is ARSS binary?
ARSS="/unfa/Applications/ARSS/arss-0.2.3-linux-binary/arss"

convert "$1" -depth 24 "$1.bmp"

$ARSS --quiet "$1.bmp" "$1.wav" --sample-rate 48000 --format-param 32 --sine --min-freq 20 --max-freq 20000 --pps 250
Run Code Online (Sandbox Code Playgroud)

这是输出:

$ ./warss.sh 01.png
The Analysis & Resynthesis Sound Spectrograph 0.2.3
Input file : 01.png.bmp
Output file : 01.png.wav
Wrong BMP format, BMP images must be in 24-bit colour
Run Code Online (Sandbox Code Playgroud)

如您所见,我尝试使用 …

command-line imagemagick image-manipulation conversion gimp

2
推荐指数
1
解决办法
1万
查看次数

识别设备插入的 USB 端口

我正在编写自定义 Bash 脚本,用于大量复制 USB 闪存和大量测试(使用f3)。

我想知道是否可以识别插入的 USB 端口是什么 USB 端口。

我有带编号端口的 USB 集线器。如果有一些静态地址我可以识别并知道是否有东西插入其中,那是什么(本质上:哪个 /dev/sd* 文件对应于该 USB 端口)我可以让用户更容易了解正在发生的事情并允许他们在此过程中尽早移除坏驱动器,而无需等到整个批次处理完毕,然后尝试从好的驱动器中找出坏驱动器(这就是我现在的做法)。

我尝试四处寻找,但没有发现任何与我想要实现的目标相吻合的内容,因此我决定在这种情况下直接寻求帮助。

现在我通过 /dev/sd* 节点名称识别驱动器,而用户不知道那是什么。如果我可以将这些映射到集线器中的 USB 端口,我可以根据 USB 端口显示信息,用户可以知道端口 5 插入了一个坏驱动器,他们可以将其删除,而不会干扰正在发生的其余过程.

然后我什至可以停止批量执行此操作并使所有端口同时循环工作,用户可以一直插入和拔出驱动器,通过 HUB 端口号跟踪什么,它可以极大地促进工作流程.

所以基本问题是:如何识别插入这些端口的 USB 端口和 USB 闪存?

usb

2
推荐指数
1
解决办法
2万
查看次数

在 Bash 中创建类似表格的 CLI 显示的最佳方法?

我正在编写一个用于大规模 USB 闪存测试的 Bash 脚本(f3在后台使用)。我需要显示一个包含多个列和单元格的类似表格的界面。

目前我正在使用printfwith ,它看起来像这样:

在此输入图像描述

我为每个驱动器运行一个单独的函数,将文本写入日志文件。解析这些日志文件以向用户显示信息。

正如您所看到的,有些行具有不应该存在的偏移量,但我无法摆脱它们,这似乎不是由打印的长字符串引起的。我不知道这是什么。

我遇到的另一个问题是刷新时间以及有时需要手动清除和重绘整个屏幕,因为偶尔会出现 stderr 消息grep,或者cat当某些文件无法正确读取时。

我目前正在对该脚本进行部分重写,并且我可以更好地在屏幕上打印数据。我想过调查一下,ncurses但这似乎有点太复杂了,可能会让我维护起来变得复杂。

我想知道是否有一种方法可以让我将echoprint命令转储到文本文件中,然后立即执行所有命令以基本上拥有一个文本“后缓冲区”,以便我的刷新可以更加一致和更快?

我还希望能够监听用户的击键并在后台做出反应,但这不是优先事项。

也许有更好的方法在 Bash 中做这种事情,但我不知道?

command-line bash printf text-user-interface

2
推荐指数
1
解决办法
1万
查看次数

ZFS 清理会更新现有数据的压缩和副本吗?

我知道像副本和压缩这样的 ZFS 属性只会影响新写入的数据。

但是我想知道磨砂膏是否会更新它?

假设我已经创建了一个池并在写入 1TB 文件之前设置了 compression=lz4 和副本=2。

然后我决定我不需要保留同上块,但我也想使用另一种类型的压缩。

如果我现在设置副本 = 1 和压缩 = gzip-9,有没有办法将其应用于已写入池的数据?

磨砂膏对我有用吗?

linux zfs

2
推荐指数
1
解决办法
909
查看次数

不能 rm 或 cp 文件名中带有通配符

我的脚本中有这样一行:

rm "$TEMP_DIR/*.txt"
Run Code Online (Sandbox Code Playgroud)

此输出失败:

rm: cannot remove 'temp/*.txt': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我不明白为什么那不起作用。我究竟做错了什么?

bash quoting wildcards

2
推荐指数
1
解决办法
3629
查看次数

我的脚本需要对 /dev/sdX 的写访问权限。如何避免以root身份运行它?

我正在开发一个 Bash 脚本,用于处理f3大量 USB 驱动器的格式化和测试(使用),如下所示:

mkntfs -QF /dev/sdX
Run Code Online (Sandbox Code Playgroud)

我曾经简单地以 root 身份运行该脚本:

sudo MyScript.sh
Run Code Online (Sandbox Code Playgroud)

然而,今天在重新设计这个工具以使其成为模块化时,我设法不小心做了一些事情,每次我运行这个脚本时都会炸毁我的操作系统。各种应用程序关闭或中断,我无法再执行基本的命令行任务。谢天谢地,重启修复了一切,但这让我再次思考 - 也许我真的不应该以 root 身份运行这个脚本?

问题是 - 我需要执行一些限制普通用户的操作(例如对 /dev/ 中的设备字符文件的写访问权限)。

我该怎么做才能授予我的脚本精确权限并避免不幸的拼写错误会擦除我的硬盘驱动器或破坏我的/dev/null?

linux root not-root-user

1
推荐指数
1
解决办法
42
查看次数