给定一个包含我想要保留的路径的文本文件,例如:
/mnt/cache/vfs/cf/A/file
/mnt/cache/vfs/cf/B/file2
我想清除下面的所有内容,/mnt/cache/vfs/cf
除非它在我的文本文件中
所以/mnt/cache/vfs/cf/Z/file3
被删除等等
文本文件很大,文件名中包含空格和可能的重音符号或其他特殊字符
给定一个包含我想要保留的路径的文本文件,例如:
/mnt/cache/vfs/cf/A/file
/mnt/cache/vfs/cf/B/file2
我想清除下面的所有内容,/mnt/cache/vfs/cf
除非它在我的文本文件中
所以/mnt/cache/vfs/cf/Z/file3
被删除等等
文本文件很大,文件名中包含空格和可能的重音符号或其他特殊字符
我试图让我的 systemd 服务在wireguard 之后启动,但我不知道该怎么做,因为wireguard 使用该systemd @ 格式。
find /etc -name *wg-quick*
/etc/systemd/system/multi-user.target.wants/[email protected]
我在 systemd 的 after 部分使用什么?
有没有办法putty
在 Zorin OS(基于 Ubuntu)上强制允许通过右键单击粘贴。
我喜欢windows的行为,当按下右键时,粘贴选定的东西。
我想从 bash 脚本创建一个文件。但是我需要扩展一些变量并从字面上打印其他变量这可能吗?
cat <<EOF > file.sh
$EXPAND
$PRINTLITERALLY
EOF
此外,我正在尝试创建一个非常大的文件,当我尝试将其粘贴到终端中进行测试时,我收到如下错误:
-bash: urlencode: command not found
所以看起来我可能有 bash 正在解释的东西,这会在运行时影响我的 bash 脚本吗?我觉得必须有更好的方法来从我的 bash 脚本创建文件
我正在尝试使用 jq 向数组添加一个值并保留其余内容:
"access":{
"allowed_users":[
"admin",
"test",
],
以上是我要附加的内容。如果我使用jq '.access.allowed_users + [ "test2" ]'
它将在那里添加一个新条目,但文件的其余部分会丢失,因此我无法再次重新创建配置文件。
我正在尝试使用here-document
带有变量扩展的 nginx 配置文件。我用:
cat <<EOF > /etc/nginx/nginx.conf
settings
EOF
它可以工作并扩展我需要的变量,但是有些变量需要逐字打印,所以它破坏了我的配置文件。
我需要逐字打印的行示例:
limit_req_zone $binary_remote_addr zone=one:30m rate=20r/s;
try_files $uri =404;
我该如何解决这个问题?
我正在尝试卷曲一个 txt 文件并将其通过管道传输到pip
.
例子:
curl -s URL | pip install -r -
它不起作用,因为最后一个-
不是我期望的 curl 输出。我也经常遇到其他命令的这个问题。
如何用 bash 解决这个问题?
我正在尝试测试文件是否$SSHPATH/$ID.*
存在。我sshpass
用来提供密码,所以我不必输入。
如果文件不存在,我想执行代码
if [ "sshpass -p $SSHPASS ssh root@$SSHHOST test ! -f $SSHPATH/$ID.*" ]; then
即使文件存在于远程服务器上,这似乎也会返回 true。为什么?
我不认为它是如何在命令成功或失败时有条件地做某事的副本,因为这也不起作用,如果文件不存在,它就不会执行
if sshpass -p "$SSHPASS" ssh "root@$SSHHOST" test ! -f "$SSHPATH/$ID.*"; then
我正在尝试制作一个将合并两个字幕的脚本。
file.srt
file.forced.srt
file2.srt
file2.Forced.srt
我对匹配两个强制字幕不区分大小写。
shopt -s extglob
shopt -s nocaseglob
for file in "${1%/}/"*forced.srt; do
echo File: "$file"
done
我有这段代码可以从文件名中删除强制字符串,所以我得到了要在我的脚本中使用的匹配文件
subs=${file//.Forced/}
如何forced
从变量中删除此字符串,不区分大小写?
我正在尝试在 docker 容器中进行健康检查。我找到了这个命令:
wget --quiet --tries=1 --spider http://localhost:6077 || exit 1
问题是,当容器运行时,如果我在没有 --spider 的情况下运行 wget,我会得到一个 HTTP 200 代码,但如果使用 --spider 它会返回一个 404。
为什么会发生这种情况?
$ wget --tries=1 http://localhost:6077
--2019-04-22 04:20:12-- http://localhost:6077/
Resolving localhost (localhost)... 127.0.0.1, ::1
Connecting to localhost (localhost)|127.0.0.1|:6077... connected.
HTTP request sent, awaiting response... 200 OK
Length: 436 [application/xml]
Saving to: ‘index.html.1’
$ wget --tries=1 --spider http://localhost:6077
Spider mode enabled. Check if remote file exists.
--2019-04-22 04:21:46-- http://localhost:6077/
Resolving localhost (localhost)... 127.0.0.1, ::1
Connecting to localhost (localhost)|127.0.0.1|:6077... connected.
HTTP request sent, awaiting response... 404 Not Found
Remote file does not exist -- broken link!!!
这种奇怪的行为正在破坏我的健康检查,如果我不使用 --spider 我假设 wget 会尝试在某个地方下载 index.html 吗?
我正在尝试从这里下载最新的 ffmpeg并将 ffmpeg 文件解压缩到,/usr/bin
但无论我做什么,我都无法将文件放到那里!
我下载和解压文件的命令
wget -q https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -P /tmp
tar -xf /tmp/ffmpeg-release-amd64-static.tar.xz --no-anchored 'ffmpeg' -C /usr/bin/ --strip-components=1
Obs:我只想要那里的文件,而不是文件夹!
我究竟做错了什么?
我正在尝试在循环中使用 find 来创建一个变量,该变量包含与文件名 + 所需字符串匹配的文件
例子:
file1.en.srt
file1.mkv
file1.pt.srt
这是代码的相关部分:
shopt -s nullglob
shopt -s nocaseglob
if [ -d "$1" ]; then
for file in "${1%/}/"*mkv; do
# Get filename to match against subs and audios
filename="$(basename "$file" .mkv)"
# Find matching subtitle file
engsubs="$(find . -name "$filename*en.srt*" | sed -e 's,^\./,,')"
# Find matching audio file
engaudio="$(find . -iname "$filename*en.ac3" -o -iname "$filename*en.eac3" -o -iname "$filename*en.dts" | sed -e 's,^\./,,')"
done
fi
如果文件不包含括号,它可以工作,但是find
命令找不到名称包含括号的文件的任何内容。为什么会这样?我想创建一个像$en
这样包含的变量file1.en.srt
我正在努力在 Ubuntu 16.04 上编译mkclean 。
我下载文件并解压缩它,但是当我运行时,./configure
我得到了这个:
./configure: 2: ./configure: %%BEGIN: not found
./configure: 3: ./configure: SCRIPT: not found
./configure: 4: ./configure: %%END: not found
make: *** corec/tools/coremake: No such file or directory. Stop.
mv: cannot stat 'corec/tools/coremake/coremake': No such file or directory
./configure: 1: ./configure: corec/tools/coremake/system_output.sh: not found
Running ./coremake
./configure: 11: ./configure: ./coremake: not found
Now you can run make -C %(PROJECT_NAME) or gmake -C %(PROJECT_NAME)
有什么帮助吗?我只能找到旧的结果,它们不起作用
在这里做一些媒体处理:
case "$3" in
all)
:
;;
[a-z][a-z][a-z])
if [ "$2" == "subtitles" ]; then switches="$switches -s $3"
if [ "$2" == "audio" ]; then switches="$switches -a $3"
;;
*)
printf 'Invalid language code for language (should be 3-letter ISO-639 or "all"): %s\n' "$2"
exit 1
;;
esac
这是为了确保az 之间$3
是一个或三个字母。all
我的问题是,如果为空,*
我的命令会失败。$3
如果我删除它,我可以继续,但我无法确定az 之间$3
是3 个字母还是 3 个字母。all
我该如何解决这个问题?
stackoverflow中有一个类似的问题,但它不适用于 bash。
需要什么才能使其与 bash 一起使用,与脚本/变量一起使用?
我说的是 ISO 639-1 或 ISO 639-2 代码。
我的 bash 是 GNU 4.3。
例子:
root@box ~/test2 # ls
eng en-US por pt-BR
该页面中的正则表达式失败:
root@box ~/test2 # ls | grep ^[a-z]{2}-[A-Z]{2}$
root@box ~/test2 # ls | grep ^[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*$
-bash: syntax error near unexpected token `('
root@box ~/test2 # ls | grep ^[a-z]{2}(-[A-Z]{2})*
-bash: syntax error near unexpected token `('
root@box ~/test2 # ls | grep "^[a-z]{2}(-[A-Z]{2})*"
我有这个代码:
for file in "$@"*png; do
echo "$file"
done
仅当您提供以 / like 结尾的路径时,它才有效/root/
。
在这种情况下,在不破坏我的脚本的情况下,将 / 添加到路径输入的正确方法是什么?
如果你在最后给出一个没有 / 的路径输入,它只是这样做:
File: /root*png
如果我将其修改为for file in "$@"/*png; do
并输入/root/test/
它可以工作,但结果看起来很难看:
File: /root/test//sample2.png
我有这个代码:
track1=$(mkvmerge -I sample.mkv | sed -ne '/^Track ID [0-9]*: audio ([^)]*).* language:eng.*/ { s/^[^0-9]*\([0-9]*\):.*/\1/;H }; $ { g;s/[^0-9]/,/g;s/^,//;p }' | cut -c1)
它将检索匹配语言英语的 1 首曲目。
我想制作一个脚本来比较相同语言的音轨,并找到质量最高的音轨。
但是mkvinfo
,mkvmerge
并且mediainfo
似乎无法检索有关给定轨道 ID 的信息,而且我不知道如何解析它们的完整输出以仅检索我需要的内容。
这个怎么做?我需要检索猜测质量可能需要的所有内容,例如格式、比特率、通道数、大小,并将其存储在track1channels
.
我对解决这个难题的其他解决方案持开放态度。