我有这个 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 的知识,我无法拼凑代码来完成其余的工作。
是否有与 futurama 上的黑板颜色相匹配的 BASH shell 配色方案?

(如果重要的话,我在 OSX 上。)
可能的重复:
在未登录的情况下让 bash 脚本在远程终端上运行?
我有一个运行 Gaussian 的 bash 脚本,这是一个化学结构计算器,它花了几天时间来处理一个分子。它在 Linux 机器上运行,我将输入文件和上述脚本加载到该机器上,然后我(应该)运行它,等待一段时间,希望程序没有崩溃,然后重新登录以收集结果。
有点像 *nx 新手,但我似乎无法弄清楚如何设置脚本运行和断开连接,同时让它继续运行。
./jobscript
Run Code Online (Sandbox Code Playgroud)
似乎阻塞直到它完成,如果我断开它终止
./jobscript &
Run Code Online (Sandbox Code Playgroud)
没有阻塞,我可以看到它在运行top,所以我认为它没问题,但是在注销时它显然杀死了程序。
即使我注销,我如何设置它运行并保持运行?
我想ls根据文件大小过滤命令的输出。任何大于 100KB 的 .jpg 或 .png 文件都应在输出中报告。
我已经能够过滤 .png / .jpg 文件,但我无法丢弃任何小于 100KB 的文件。
这是我目前正在使用的:
ls -lah | grep '.png\|.jpg'
Run Code Online (Sandbox Code Playgroud)
任何想法我怎么能做到这一点?
我在 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 命令并提供解决使用键盘在命令提示符上滚动问题的答案
语境:
我有一个大型 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 检查它。是否有聪明的单行代码或脚本?
我想从命令行重定向我的输出两次
例如:
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)
我希望该命令也打印到屏幕上。我怎样才能做到这一点?
有没有办法为 Bash 的 Tab 补全设置最少字符数?
我的原因是我经常不小心在空命令行上按了 tab 键,加载命令列表需要很长时间。
我在 .bash_profile 中自定义了我的提示,如下所示:
export PS1="\w \e[0;32m\$(vcprompt -f '[%n:%b]')\e[m\$ "
Run Code Online (Sandbox Code Playgroud)
现在,当我按向上箭头返回历史,找到我想要的那个,然后按 control-a 转到行首时,它通常会在第 5 个字符处停止,而不是一直到开头. 然后前几个字符被“冻结”到位。如果我从那里向上或向下箭头,就好像这些字符是新的 $。
我按回车,又恢复正常了,但是让那些字符卡在那里很烦人!我在定制中搞砸了什么吗?谢谢!
我在 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”是如何工作的?