我正在尝试从不可靠的远程服务器同步文件,这意味着连接往往会“随机”失败
rsync:连接意外关闭
rsync 是用 --partial 调用的,所以我希望能够在循环中调用 rsync 直到文件完全传输。似乎没有告诉 rsync 重试的标志。
编写脚本的最佳方法是什么?bash for 循环?
我有两个布局相似的目录树,即
.
|-- dir1
| |-- a
| | |-- file1.txt
| | `-- file2.txt
| |-- b
| | `-- file3.txt
| `-- c
| `-- file4.txt
`-- dir2
|-- a
| |-- file5.txt
| `-- file6.txt
|-- b
| |-- file7.txt
| `-- file8.txt
`-- c
|-- file10.txt
`-- file9.txt
Run Code Online (Sandbox Code Playgroud)
我想合并 dir1 和 dir2 目录树以创建:
merged/
|-- a
| |-- file1.txt
| |-- file2.txt
| |-- file5.txt
| `-- file6.txt
|-- b
| |-- file3.txt
| |-- file7.txt …Run Code Online (Sandbox Code Playgroud) 根据手册页,如果执行行之一以 255 错误退出,则 xargs 将退出:
如果命令的任何调用以 255 的状态退出,xargs 将立即停止而不读取任何进一步的输入。发生这种情况时,会在 stderr 上发出错误消息。
我怎样才能让 xargs不这样做?
我有一个大约 1500 行的批处理作业,我想一次运行 50 行。我发现它总是在某条生产线上死亡,并且没有完成工作。不好!
一个更好的问题,描述我正在尝试做的事情的问题是:
我怎样才能运行一个 1500 行的批处理脚本,一次 50 行,这样它就不会在中间退出作业,并将输出捕获到某种日志文件中?
怎么可能通过管道输出wget下载的文件?如果不是,我应该使用哪些替代方案?
我想创建一个循环,如果它返回错误,则重复 ncftp 传输。
我有点不确定如何在循环中使用退出代码变量。这样的东西会起作用吗?
until [$? == 0]; do
ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file
done
Run Code Online (Sandbox Code Playgroud) 有没有办法强制 SSH 在远程端使用特定的 shell,而不管用户的默认 shell 是什么?
我尝试过类似的解决方案:
ssh host.domain.com /bin/bash -c 'complicated, multi-line command'
Run Code Online (Sandbox Code Playgroud)
但不幸的是,远程端的默认 shell 负责解析“复杂的多行命令”部分,我很难充分地转义它以供 Bash 和 C shell 用户使用。
如何将文件的用户/所有者权限复制到其组权限?
例如,如果权限是 755,我希望它们变成 775。
澄清:755 -> 775 123 -> 113 abc -> aac
如果我可以对目录中的所有文件递归执行此操作,则奖励。
(也就是说,对于每个文件,所有者权限都被复制到组权限中。每个文件可能具有不同的权限。)
我正在使用 df -h 打印出人类可读的磁盘使用情况。我想弄清楚是什么占用了这么多空间。例如,有没有办法通过管道传输此命令,以便它打印出大于 1GB 的文件?其他想法?
谢谢
我正在尝试在嵌入式设备(Synology DS212+ NAS)上运行的 ARM Linux 上安装 bash 作为默认 shell。但确实有些不对劲,我无法弄清楚它是什么。
症状:
1)root有/bin/bash作为默认shell,可以通过SSH正常登录:
$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
$ ssh root@NAS
root@NAS's password:
Last login: Sun Dec 16 14:06:56 2012 from desktop
#
Run Code Online (Sandbox Code Playgroud)
2) joeuser 将 /bin/bash 作为默认 shell,并在尝试通过 SSH 登录时收到“权限被拒绝”:
$ grep joeuser /etc/passwd
joeuser:x:1029:100:Joe User:/home/joeuser:/bin/bash
$ ssh joeuser@localhost
joeuser@NAS's password:
Last login: Sun Dec 16 14:07:22 2012 from desktop
Permission denied, please try again.
Connection to localhost closed.
Run Code Online (Sandbox Code Playgroud)
3) 将 joeuser 的 shell 改回 /bin/sh:
$ grep joeuser /etc/passwd
joeuser:x:1029:100:Joe …Run Code Online (Sandbox Code Playgroud) 我正在 Ubuntu 12.04.1 LTS 上的 bash shell 中运行此命令。我试图一举删除[和]字符,即不必第二次通过管道传输到 sed。
我知道方括号在正则表达式中具有特殊含义,所以我通过在前面加上反斜杠来逃避它们。我期待的结果只是字符串,123但方括号仍然存在,我很想知道为什么!
~$ echo '[123]' | sed 's/[\[\]]//'
[123]
Run Code Online (Sandbox Code Playgroud)