标签: bash

我的 bash 脚本保留最后一个 x 文件并删除其余文件有什么问题?

我有这个 bash 脚本,它可以很好地按 cron 计划备份我的数据库:

#!/bin/sh

PT_MYSQLDUMPPATH=/usr/bin
PT_HOMEPATH=/home/philosop
PT_TOOLPATH=$PT_HOMEPATH/philosophy-tools
PT_MYSQLBACKUPPATH=$PT_TOOLPATH/mysql-backups
PT_MYSQLUSER=*********
PT_MYSQLPASSWORD="********"
PT_MYSQLDATABASE=*********
PT_BACKUPDATETIME=`date +%s`
PT_BACKUPFILENAME=mysqlbackup_$PT_BACKUPDATETIME.sql.gz
PT_FILESTOKEEP=14

$PT_MYSQLDUMPPATH/mysqldump -u$PT_MYSQLUSER -p$PT_MYSQLPASSWORD --opt $PT_MYSQLDATABASE | gzip -c > $PT_MYSQLBACKUPPATH/$PT_BACKUPFILENAME
Run Code Online (Sandbox Code Playgroud)

问题在于它会继续转储文件夹中的备份,而不是清理旧文件。这就是变量的PT_FILESTOKEEP用武之地。无论设置为多少,这就是我想要保留的备份数量。所有备份都带有时间戳,因此通过按名称 DESC 对其进行排序,您将首先获得最新的备份。

任何人都可以帮我完成 BASH 脚本的其余部分来添加文件清理吗?我缺乏 bash 的知识,我无法拼凑代码来完成其余的工作。

linux backup bash

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

futurama bash 计划

是否有与 futurama 上的黑板颜色相匹配的 BASH shell 配色方案? 在此处输入图片说明

(如果重要的话,我在 OSX 上。)

bash colors macos

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

如何在后台运行脚本并在我注销时让它继续运行?

可能的重复:
在未登录的情况下让 bash 脚本在远程终端上运行?

我有一个运行 Gaussian 的 bash 脚本,这是一个化学结构计算器,它花了几天时间来处理一个分子。它在 Linux 机器上运行,我将输入文件和上述脚本加载到该机器上,然后我(应该)运行它,等待一段时间,希望程序没有崩溃,然后重新登录以收集结果。

有点像 *nx 新手,但我似乎无法弄清楚如何设置脚本运行和断开连接,同时让它继续运行。

./jobscript
Run Code Online (Sandbox Code Playgroud)

似乎阻塞直到它完成,如果我断开它终止

./jobscript &
Run Code Online (Sandbox Code Playgroud)

没有阻塞,我可以看到它在运行top,所以我认为它没问题,但是在注销时它显然杀死了程序。

即使我注销,我如何设置它运行并保持运行?

linux bash

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

根据文件大小过滤 ls 输出

我想ls根据文件大小过滤命令的输出。任何大于 100KB 的 .jpg 或 .png 文件都应在输出中报告。

我已经能够过滤 .png / .jpg 文件,但我无法丢弃任何小于 100KB 的文件。

这是我目前正在使用的:

ls -lah | grep '.png\|.jpg'
Run Code Online (Sandbox Code Playgroud)

任何想法我怎么能做到这一点?

bash command-line ls

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

如何使用键盘通过 Git Bash shell 滚动文本

我在 Windows 7 上使用 Git bash。有时,当我在一个包含很多文件的文件夹中并且当我输入时

$ ls
Run Code Online (Sandbox Code Playgroud)

shell 显示不止一个屏幕的内容。为了查看完整的结果,我必须伸手去拿鼠标并进行一些滚动。有什么方法可以让我只用键盘滚动 shell 窗口?

[(不太理想)修复 1] 我知道你可以使用滚动浏览结果

$ ls | less
Run Code Online (Sandbox Code Playgroud)

但我觉得添加 | 每次都少,工作量太大。所以请不要建议将此作为答案。

[编辑 1]此处使用ls只是返回多个屏幕输出的任何命令的示例。因此,请不要将您的答案集中在 ls 命令并提供解决使用键盘在命令提示符滚动问题的答案

keyboard-shortcuts bash

7
推荐指数
2
解决办法
9195
查看次数

大文件上的 md5sum

语境:

我有一个大型 TB 驱动器,其中包含各种类型的大型媒体文件、ISO 映像文件等。md5sum由于速度/性能,我想在第一兆字节上验证其内容。

您可以创建这样的总和:

FILE=four_gig_file.iso
SUM=$(head -c 1M "$FILE" | md5sum)
printf "%s *%s\n" ${SUM%-} "$FILE" >>test.md5
Run Code Online (Sandbox Code Playgroud)

您将如何验证这一点,因为第一兆字节的签名与整个文件的签名不同?

我见过用其他语言完成的,但我想知道如何在Bash 中完成。我已经尝试了md5sum -c涉及管道等的各种排列。


md5sum -c您是否必须将散列重新计算到一个新文件中,然后“区分”它们,而不是使用?

你可以使用一个

find /directory/path/ -type f -print0 | xargs -0 md5sum blah blah
Run Code Online (Sandbox Code Playgroud)

处理大量文件。

PS:Rsync 不是一个选项

更新 2:就目前而言——

使用 head、find 和 md5sum;然后可以相当快地从源目录创建一个文件,然后在目标计算后用另一端的 diff 检查它。是否有聪明的单行代码或脚本?

bash find md5

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

重定向输出两次

我想从命令行重定向我的输出两次

例如:

comp.reg $T_GDS_MASTER/bin.new $T_GDS_MASTER/bin.old > $T_GDS/log/comp.reg.out 2>&1
Run Code Online (Sandbox Code Playgroud)

我希望该命令也打印到屏幕上。我怎样才能做到这一点?

linux bash shell

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

如何设置 Bash 选项卡完成的最小字符数?

有没有办法为 Bash 的 Tab 补全设置最少字符数?

我的原因是我经常不小心在空命令行上按了 tab 键,加载命令列表需要很长时间。

bash tab-completion

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

使用 Bash 在 OS X 的 Terminal.app 中的历史记录和 control-a 期间出现的自定义提示

我在 .bash_profile 中自定义了我的提示,如下所示:

export PS1="\w \e[0;32m\$(vcprompt -f '[%n:%b]')\e[m\$ "
Run Code Online (Sandbox Code Playgroud)

现在,当我按向上箭头返回历史,找到我想要的那个,然后按 control-a 转到行首时,它通常会在第 5 个字符处停止,而不是一直到开头. 然后前几个字符被“冻结”到位。如果我从那里向上或向下箭头,就好像这些字符是新的 $。

我按回车,又恢复正常了,但是让那些字符卡在那里很烦人!我在定制中搞砸了什么吗?谢谢!

bash prompt command-history macos

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

为什么屏幕没有显示当前正在运行的进程名称?(Mac OSX 终端 bash)

我在 Mac OSX 终端应用程序 (bash) 中运行屏幕。

这是 screenrc (从这里得到的):

$ cat ~/.screenrc 
termcapinfo xterm* ti@:te@
startup_message off
defutf8 on
shelltitle "$ |what?" # make screen assign window titles automatically
hardstatus alwayslastline
hardstatus string '%{= kw} [ %{= kb}%H%{= kw} ][%= %{= kw}%?%-Lw?%{= kW}%n*%f %t%?%?%{= kw}%?%+Lw%?%?%= ][ %{r}%l%{w} ]%{w}[%{r} %m/%d/%y/ %C %A %{w}]%{w}'
$
Run Code Online (Sandbox Code Playgroud)

可以看出,我确实有一行将当前进程名称显示为屏幕中的标题:

shelltitle "$ |what?" # make screen assign window titles automatically
Run Code Online (Sandbox Code Playgroud)

但在屏幕内我只看到“什么?” (默认)而不是进程名称。这表明“$”不起作用。

我错过了什么?“$ |something-else”是如何工作的?

terminal bash gnu-screen macos

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