标签: bash

列出在特定范围内编号的文件

我在目录中有一组文件,编号如下:

file1.txt
file2.txt
...
file30.txt
...
Run Code Online (Sandbox Code Playgroud)

现在,我想对特定范围的文件运行命令,比如 18 到 31。

到目前为止,我已经使用了以下方法,

三个论点

command file1[8-9].txt file2[0-9].txt file3[0-1].txt
Run Code Online (Sandbox Code Playgroud)

现在假设我想要所有其他数字,

环形

for i in `jot - 18 31 2`; do echo file${i}.txt; done | xargs command
Run Code Online (Sandbox Code Playgroud)

这似乎是一个更可靠的循环(空格有效)

for i in `jot - 18 31 2`; do echo "\"file${i}.txt\" "; done | xargs command
Run Code Online (Sandbox Code Playgroud)

但似乎应该有一种更简单的方法来做到这一点。我猜最好的解决方案是创建一个 bash 函数,它将文件集返回到命令行。然后我可以做类似的事情,

command `filerange file 18 31`
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法或建议来有效地做到这一点?

如果我错过了在网络或superuser.

bash range

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

如何将(大)目录复制到另一个目录上,仅更改不同的文件?

我有目录a和目录b。他们很大。b 与 a 几乎相同。“几乎”意味着 4-5 个文件不同,我不知道它们是哪个。我想将 b 复制到 a 上,但只复制不同的文件。我在 bash 中。

(不,我不能简单地删除 a 并用 b 替换它,因为 1)a 是受版本控制的 2)完整副本(或 mv)需要太多。我只想复制不同的文件)。

linux bash file-transfer cp

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

使用正则表达式反向历史搜索

我正在寻找一种工具,允许使用简单的正则表达式(或仅多个匹配项)支持进行反向增量搜索。例如,如果我想找到命令“foo bar baz”,我可以执行以下操作来快速找到命令:

CRTL-R(开始搜索)输入“foo”(匹配最近使用 foo 的命令)继续输入“foo|baz”(匹配包含“foo”和“baz”的最近命令。

这样的东西存在吗?如果没有,我怎么能自己去实施呢?

bash zsh history

16
推荐指数
3
解决办法
4496
查看次数

bash 前面的破折号 (-)

如果我在 OS X (10.6.4) 终端中检查我的 bash shell,例如键入echo $0,我的 shell 前面会有一个破折号,如下所示:-bash. 这个破折号是什么意思?

bash macos

16
推荐指数
1
解决办法
4777
查看次数

意外的文件结尾。Gzip 压缩文件

我对 gzip 文件发疯了。

我可以使用 WinRAR 在 Windows 中解压缩文件,但在任何 UNIX 操作系统上都不可能。

该文件似乎没问题。如果我做

file the_name_of_the_file.gz
Run Code Online (Sandbox Code Playgroud)

我得到:

the_name_of_the_file.gz: gzip compressed data, from Unix, last modified: Sun Jan 30 14:10:21 2011
Run Code Online (Sandbox Code Playgroud)

但如果我这样做

gunzip -f the_name_of_the_file.gz
Run Code Online (Sandbox Code Playgroud)

我总是得到:

gzip: the_name_of_the_file.gz: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

当我尝试在 Ubuntu 或 MacOSX 中使用 GUI 工具提取文件时,会发生同样的问题,

有任何想法吗?

linux bash gzip

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

PHP 脚本不能运行 bash 脚本。sh:权限被拒绝

我正在尝试从 PHP 执行 .sh 脚本,但是它没有执行。

我检查了错误日志,并且收到了“sh:权限被拒绝”错误。我检查了在哪个用户下运行 php,它是在 apache 用户下完成的。

我尝试将 .sh 的所有权更改为 apache 用户,但没有结果。

起初我以为这是因为脚本在 www/ 目录之外,但是即使我将脚本放在同一目录中,仍然会出现错误。

除了将 apache 用户添加到 SUDOers 列表之外,还有其他解决方案吗?

如果我使用 'php filename.php' 命令从 putty 启动它,sh 脚本运行良好。

script bash permissions php

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

ssh 权限仅在 cron 作业中被拒绝

有一个非常奇怪的问题。我创建了一个小的 bash 脚本,它通过 ssh(使用公钥身份验证)在远程主机上运行命令。

当我从命令行手动运行此脚本时,它工作正常,但是当放置在 /etc/cron.hourly 中时,它会失败并显示Permission denied, please try again.错误。

  • 我使用ssh -i /root/.ssh/id_rsa user@remote "command";在脚本中显式设置密钥
  • 脚本以 root 身份运行(我添加了一个echo `id` > /tmp/whoami.log来仔细检查);和
  • ssh 密钥没有密码保护...

系统是 Ubuntu 12.04 服务器,我在远程端没有太多访问权限进行故障排除,但正如我所说,手动运行 ssh 或从命令行运行相同的 bash 脚本。

知道为什么会发生这种情况或如何解决吗?

更新

结果我弄错了,ssh 密钥密码保护(钥匙串加载 ssh 代理),因此为什么它从脚本中失败,但在从 bash 会话运行时却没有。添加. ~/.keychain/$HOSTNAME-sh到我的脚本中解决了问题(感谢@grawity 为我指明了正确的方向并提供了全面的答案)。

ssh bash cron

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

运行时命令每个输出的前缀

我正在尝试制作一个模块化脚本。我有几个从单个脚本调用的脚本/命令。
我想为每个单独命令的输出添加前缀。

例子:

我的文件都是commands.sh/command1.sh/command2.sh

command1.sh输出
file exists
file moved

command2.sh输出
file copied
file emptied

allcommands.sh运行脚本command1.shcommand2.sh

我想为这两个脚本的每个输出添加前缀,如下所示:
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied

linux bash shell command-line bash-scripting

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

当我登录到服务器时,Bash 提示更改颜色

有没有办法使 bash 提示动态化,以便在登录服务器时改变颜色?

所以我希望在我的系统上颜色为绿色,并在连接到服务器时更改为红色。我有大量的服务器,我不想.bashrc在所有这些服务器上添加不同的内容。

bash shell colors bashrc

16
推荐指数
3
解决办法
6382
查看次数

如何在 shell 脚本中关闭 stdin?

我有一个行为不端的程序,我需要从我的脚本中调用它。一旦在 stdin 上看到某些内容,它就会退出。有没有办法关闭标准输入?

bash shell

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

标签 统计

bash ×10

linux ×3

shell ×3

bash-scripting ×1

bashrc ×1

colors ×1

command-line ×1

cp ×1

cron ×1

file-transfer ×1

gzip ×1

history ×1

macos ×1

permissions ×1

php ×1

range ×1

script ×1

ssh ×1

zsh ×1