我在 bash 备份脚本中非常尴尬,并且错过了一些重要的事情。我知道 ext3 文件系统不跟踪创建日期,但是在 ext3 中复制文件会更新通过 stat 看到的更改时间(这会起作用)。但是,当文件从一台 Windows 服务器复制到另一台(我通过 smb/cifs 安装的)时,根据我的测试,更改的时间不会更新。我正在使用 find 对 cifs 共享进行搜索。真的没有办法检测何时使用“查找”从 Linux 通过 cifs 共享创建新文件?
此外,我对 rsync 非常熟悉,在这种情况下,rsync 的限制将其排除在外。我想我可以使用 rsync 进行搜索并尝试将结果通过管道传递给操作 (gzip),但我认为子外壳会很荒谬。当然可能是错的。任何建议将不胜感激。可以提供更多细节,但从我的研究来看,我认为这是不可能的。
是否有一个 SSH 选项(类似于-o ConnectTimeout=$seconds)来限制它在password:提示时等待的时间?
请注意,我确实将密钥对用于无密码 ssh,但我仍然password:每周看到几次提示,因为我在后台窗口中运行了 bash 函数,每当它们断开时就会重新连接我的 SSH 隧道(当我在 WiFi 网络之间徘徊并关闭MacBook 盖子随机)。因此,有时 SSH 协商会进入“密码:”状态,然后它会一直停留在那里,直到我手动干预^C或killall ssh...
dtunnel-home () {
while true ; do
title "XXX-TTT-..."
wait-for-host.sh "$g" ## sleep until ping-able.
time (
set -x
ssh -o ConnectTimeout=10 \
-Y -L 5920:$t:5900 -L ... \
$g_user@$g
) ; date "+%Y-%m-%d_%H-%M-%S"
done
}
Run Code Online (Sandbox Code Playgroud) 尝试:
awful.util.spawn("scrot -s")
awful.util.spawn("urxvt -e \"scrot -s\"")
os.execute("scrot -s")
Run Code Online (Sandbox Code Playgroud)
以及所有可能的组合,甚至与sleep.
也试过守护进程。
没有任何作用 =( PS 所有命令都在键绑定中,如果我替换scrot -s为scrot,则所有命令都有效,除了选择区域。
鉴于此目录内容:
one.file
two.file
three.file
Run Code Online (Sandbox Code Playgroud)
在 bash 中,当我输入时
rm *.file !(two)
Run Code Online (Sandbox Code Playgroud)
只有one.file和three.file被删除。我怎样才能在 ZSH 中做到这一点?
我的数据如下所示:
60 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
61 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
64 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)
我想通过行前缀将其拆分为单独的文件..像这样:
file 60 contains all lines prefixed with "60"
file 61 contains all lines prefixed with "61"
...
Run Code Online (Sandbox Code Playgroud)
到目前为止,我想出的最好的想法是对所有行前缀进行 grep,然后循环遍历并将它们中的每一个 grep 放到一个单独的文件中,但它是一个相当大的文件,因此可能需要很长时间。也许有比循环和 grepping 更好的方法?某种grep分组方式?我知道如果每个部分之间都有标记,那么有一种方法可以将文件剪切掉,例如 --- …
我最近从 imagemagick 了解到了 convert 命令,我用它来压缩许多我个人使用的图片,以及我拥有的博客。根据我的经验,Imagemagick 是最好的图像压缩程序,它可以最大程度地控制如何压缩图像。我还有很多想压缩的图片,但又不想用convert命令这么多次,一个一个一个文件。主要的问题是我做这件事非常耗时。我希望能够以一种大批量的方式来压缩我的图像。我可以通过命令行执行此操作,但 GUI 可能会使这更直观一些。
这是我用来将原始图像缩小为原始大小 20% 的命令示例。转换 -resize 20% 20140322_102113.jpg 20140322_102113opt.jpg
如果我说有 100 张图像,并且它们都在同一个文件夹中,我希望能够执行以下操作
对于所有图像 convert -resize 20% imagename.jpg imagename_optimized.jpg
不知道有没有命令已经可以做到这一点,如果没有,我想过创建一个bash命令,但我对bash不太熟悉。帮助创建这个简单的 bash 脚本,或有关如何解决我的困境的建议表示赞赏。我使用 Linux,并且只想要一个专门针对 Linux 的解决方案。谢谢
我有一个 bash 文件,我想在其中存储一个版本文本(最好是“ echo version 1.0.1”,以便在执行时自动打印出自己的版本)
我正在尝试创建一个将更新版本的命令组。
到目前为止我有
grep "echo version" ~/.bashrc | cut -c 14- | sed -e 's/\./\n/g'
Run Code Online (Sandbox Code Playgroud)
提取“echo version 1.0.1”,切出“echo version”并在点之间拆分版本
1
0
1
Run Code Online (Sandbox Code Playgroud)
并且我达到了正则表达式、bash 和 google-foo 的限制以提取最后一个数字(补丁版本),我可以将其递增并写回文件。
主要是,我如何获得最后一个数字?
另外,如果我应该做的更好,请提出建议。
我正在阅读有关 bash 架构的这本书,其中一位 bash 维护者说:
shell 函数调用有不同的变量作用域,命令前面的赋值语句设置的变量有不同的临时作用域。例如,当这些赋值语句位于 shell 内置的命令之前时,shell 必须跟踪解析变量引用的正确顺序,并且链接的作用域允许 bash 这样做。
我无法弄清楚如何做到这一点。这会打印出一个空白的换行符:
foo="bar" echo $foo
Run Code Online (Sandbox Code Playgroud)
这会打印出“bar”,但该foo变量在命令完成后仍被定义,所以我不认为它是“命令范围”:
foo="bar"; echo $foo
Run Code Online (Sandbox Code Playgroud)
如何定义具有命令范围的变量?
新手来了 我正在寻找 bash 脚本来居中和对齐文本。我的脚本只适用于一行文本。你会如何改进它?
#!/bin/bash
COLS=$(tput cols)
while true; do
clear
echo -n "Type text "
read text
echo
echo "Menu"
echo "1) Right justify "
echo "2) Center "
echo "3) Exit "
echo
echo -n "Choose [1-3]: "
read opt
echo
case $opt in
1) printf "%*s\n" $COLS "$text"
break
;;
2) printf "%*s\n" $[$COLS/2] "$text"
break
;;
3) break
;;
*)
echo "Error. Press [1-3]"
break
;;
esac
done
Run Code Online (Sandbox Code Playgroud) 假设我有一个 bash 脚本:
#!/bin/bash
read -p "Gimme some stuff: " stuff
echo "**${stuff}**"
Run Code Online (Sandbox Code Playgroud)
如果脚本是通过管道调用的,例如:
echo "Here's some stuff" | ./myscript.bash
Run Code Online (Sandbox Code Playgroud)
然后read命令将从管道中读取。即使我在点击该命令之前尝试清除 stdinread,它仍然会立即返回。
有什么办法吗?如果我无法控制调用脚本的方式,有没有办法强制它接受 aread或select来自终端的输入?如果没有,是否有任何偷偷摸摸的方法来暂停脚本以从标准输入以外的用户那里获取输入?