标签: bash-scripting

Bash:比 tee 更好的输出到控制台和输出文件的方法?

我需要显示的是定期刷新的日志。这是一个大约 10 行文本的块。我正在使用 |tee,它现在可以工作。然而,表现却不太令人满意。它等待一段时间,然后从多次刷新中输出几块文本(特别是当程序刚刚启动时,需要相当长的时间才能开始在控制台上显示任何内容,我第一次看到这个时,我以为程序挂了)。另外,它在最后一个块的中间随机断裂,因此呈现起来相当难看。

有没有办法改善这一点?(也许每次输出更少,并更频繁地在输出文件和控制台之间切换?)

更新:这是我的 bash 脚本中的内容: tail -f /var/log/syslog | egrep --line-buffered "my search string" > tmp.txt & python script.py | tee result.log

linux bash command-line bash-scripting

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

无法通过共享连接进行 scp

我在使用 SSH 共享连接时遇到以下问题:

# Set up a shared connection
ssh -f -N -M -S "$SSH_CONTROL_SOCKET" root@"$ONE_HOST"

# I can scp *without* the shared connection
scp root@"$ONE_HOST":/etc/hosts /dev/null

# I can execute a remote command *with* the shared connection
ssh -S "$SSH_CONTROL_SOCKET" root@"$ONE_HOST" "date"

# But I can't scp *with* the shared connection
scp -vvv -S "$SSH_CONTROL_SOCKET" root@"$ONE_HOST":/etc/hosts .
Run Code Online (Sandbox Code Playgroud)

该脚本给出以下输出:

hosts                                                              100%   59    67.8KB/s   00:00
Wed Feb 28 08:23:10 MST 2018
Executing: program /home/myUser/ssh_sharing_socket host myHost.example.com, user root, command scp -v …
Run Code Online (Sandbox Code Playgroud)

linux ssh bash openssh bash-scripting

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

如何使用 youtube-dl 获取播放列表名称(标题)

我在 Linux 中遇到了 youtube-dl 的问题,所以我想创建一个 bash\n脚本,让我下载一个播放列表并将所有视频放入\n具有该播放列表名称的单独文件夹\n这是我的尝试:

\n\n
#!/bin/bash\n\necho \'Enter the URL of the playlist : \'\nread url\ntitle = youtube-dl -o "%(title)s \\"$url\\""\nmkdir "$title"\ncd $title\nyoutube-dl --download-archive archive.txt $url\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它总是给出这个错误:

\n\n
[gerzal@dhcppc1 Videos]$ ./try.bash\nEnter the URL of the playlist :\nff\nyoutube-dl -o %(title)s "ff"\n./try.bash: line 6: title: command not found\nmkdir: cannot create directory \xe2\x80\x98\xe2\x80\x99: No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n\n

预先感谢您的帮助,我们将不胜感激。

\n\n

更新信息:

\n\n

我联系了一位 youtube-dl 开发人员,他在一个命令行中给了我解决方案,而没有添加 mkdir 命令,这是命令行:

\n\n
youtube-dl --download-archive archive.txt -o \'%(playlist_title)s/%(title)s-%(id)s.%(ext)s\' "$url"\n
Run Code Online (Sandbox Code Playgroud)\n

fedora youtube bash-scripting youtube-dl

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

如何在 OS X 中过滤命令的输出

我需要通过 creatbyproc.d 监视从未知应用程序到已知目录的写入。我将不得不让它启动并运行长达 36 小时,如果没有任何过滤器而不填满整个 HDD,这是不可能的。

这些日志很快就会变得非常大,我需要一种方法来只记录特定信息。

目前我的命令是:

sudo creatbyproc.d > /Users/MyUser/output.txt
Run Code Online (Sandbox Code Playgroud)

一个好的答案是按文件夹过滤: /private/tmp/

一个很好的答案将允许通配符过滤: /private/tmp/*.txt

bash bash-scripting macos

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

Bash 脚本:“[[:未找到”

这是我的代码:

#!/bin/bash
if [[ -d ~/viwiki ]]; then
 cd ~/viwiki
else
 mkdir ~/viwiki
 cd ~/viwiki
fi
if ! [[ -d ./log ]]; then
 mkdir log
 mkdir log/log
 mkdir "log/wget"
elif ! [[ -d ./log/log ]]; then
 mkdir log/log
elif ! [[ -d "./log/wget" ]]; then
 mkdir "log/wget"
fi
Run Code Online (Sandbox Code Playgroud)

运行时,出现错误:

tuankiet65@UbuntuPC:~$ sh viwik/test2.sh
viwik/test2.sh: 2: viwik/test2.sh: [[: not found
viwik/test2.sh: 8: viwik/test2.sh: [[: not found
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

bash bash-scripting

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

sed 如何从文件中获取模式

我有两个文件,一个包含模式列表,另一个需要根据这些模式进行更改。到目前为止,我一直在尝试

cat patterns.txt| xargs -n1| sed 's/patternfromfile/subtitution/'
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将 xargs 输入到 's/here//'

谢谢

linux sed bash-scripting

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

在 bash for 循环中列出多种文件类型

我写了一个脚本来转换文件夹中的图像。该脚本使用 for 循环:

我=“1”
对于 *.jpg 格式的文件;做
     outputFile=$(echo "image"$(echo $i))
     转换 "$file" -resize 50x50 $outputFile
     i=$[i+1]
完毕

我想要做的是允许脚本在多个文件类型扩展名上运行。现在我试过这样做:

对于 *.jpg *.JPG *.jpeg 格式的文件;做
....
完毕

我遇到的问题是,如果您在一个包含所有 *.JPG 而没有 *.jpg 的文件夹中,即使没有图像,脚本仍然会碰撞 i+1,因为它无论如何都会运行 for 循环,但找不到任何 *.jpg 都会转到 *.JPG。

如何定位多个文件扩展名而不按类型自行运行?例如,它们的语法是这样的:

用于 [*.jpg | 中的文件 *.JPG]; 做
...

?
这样我的输出文件夹总是包含像这样标记的图像:
image1.jpg
image2.jpg
image3.jpg
等等。而不是以

一个文件夹缺少 image1.jpg 结束,因为它没有 *.jpg 首先运行。

bash bash-scripting

5
推荐指数
2
解决办法
9590
查看次数

查找文件但排除几个目录?

如何find列出每个文件但从搜索中排除少数目录?

find / -type f -not -path "./foo*" -not -path "/bar*" -print
Run Code Online (Sandbox Code Playgroud)

我在其他 stackexchanges 上看到过示例,例如./,但我尝试过的似乎都不起作用。

这有点有效:

find / -type f -not -path "*foo*" -not -path "*bar*" -print
Run Code Online (Sandbox Code Playgroud)

但事实并非如此;它还从搜索结果中排除名为“foo”和“bar”的文件。

linux bash shell ubuntu bash-scripting

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

在bash中将引号插入字符串变量

有没有办法在字符串变量的开头和结尾插入引号?

我有这个变量说:

string="desktop/first folder"
Run Code Online (Sandbox Code Playgroud)

如果我回应这个,它会显示:

desktop/first folder
Run Code Online (Sandbox Code Playgroud)

我需要将字符串存储为:

"desktop/first folder"
Run Code Online (Sandbox Code Playgroud)

bash string bash-scripting

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

如何解压缩文件名开头带连字符的文件

我有一个 Zip 文件,其名称开头带有一个连字符,比方说 '- stuff.zip'

如果我需要移动或复制文件,这意味着我需要使用双连字符,这样文件名就不会被解释为一个选项:

cp -- '- stuff.zip' '- stuff2.zip'
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试对这个文件使用解压缩,那是行不通的:

unzip -l -- '- stuff.zip'

error:  -fn or any combination of -c, -l, -p, -t, -u and -v options invalid
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有我能想到的简单和双引号、反斜杠、变量中的文件名的组合,但我无法让它工作。我无法重命名文件,因为脚本将在只读文件系统上运行。

有效的一件事是使用 find :

find -maxdepth 1 -name '- stuff.zip' -exec unzip -l {} \;
Run Code Online (Sandbox Code Playgroud)

但是非常不方便。

zip bash unzip bash-scripting

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

标签 统计

bash-scripting ×10

bash ×8

linux ×4

command-line ×1

fedora ×1

macos ×1

openssh ×1

sed ×1

shell ×1

ssh ×1

string ×1

ubuntu ×1

unzip ×1

youtube ×1

youtube-dl ×1

zip ×1