标签: scripting

如何从 rsync 输出已更改文件的列表?

我在 bash 脚本中使用 rsync 来保持几个服务器和 NAS 之间的文件同步。我遇到的一个问题是尝试生成在 rsync 期间已更改的文件列表。

这个想法是,当我运行 rsync 时,我可以将已更改的文件输出到文本文件中 - 更希望内存中有一个数组 - 然后在脚本存在之前,我可以对已更改的文件运行 chown 。

有没有人找到一种方法来执行这样的任务?

# specify the source directory
source_directory=/Users/jason/Desktop/source

# specify the destination directory
# DO NOT ADD THE SAME DIRECTORY NAME AS RSYNC WILL CREATE IT FOR YOU
destination_directory=/Users/jason/Desktop/destination

# run the rsync command
rsync -avz $source_directory $destination_directory

# grab the changed items and save to an array or temp file?

# loop through and chown each changed file
for changed_item …
Run Code Online (Sandbox Code Playgroud)

scripting bash rsync

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

Bash 脚本:要求脚本以 root 身份运行(或使用 sudo)

我正在尝试编写一个 bash 脚本(在 Ubuntu 中),它将使用 tar 备份目录。

如何检查脚本,使其只能以 root 身份(或使用 sudo)运行?

例如,如果用户运行该脚本,则应该说该脚本必须以 sudo 权限运行,然后退出。如果脚本以 root 身份执行,它将继续通过检查。

我知道必须有一个简单的解决方案,我只是无法通过谷歌搜索找到它。

scripting permissions bash root

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

如何将 STDIN 中的多行读取到变量中?

我一直在谷歌上搜索这个问题无济于事。我正在工作中自动化构建过程,我要做的就是获取版本号和可能是多行的构建的微小描述。它运行的系统是 OSX 10.6.8。

我已经看到了从使用 CAT 到根据需要处理每一行的所有内容。我不知道我应该使用什么以及为什么。

尝试

read -d '' versionNotes
Run Code Online (Sandbox Code Playgroud)

如果用户必须使用退格键,则会导致输入乱码。也没有终止输入的好方法,因为 ^D 不会终止,而 ^C 只是退出进程。

read -d 'END' versionNotes
Run Code Online (Sandbox Code Playgroud)

有效...但如果需要退格键,输入仍然会出现乱码。

while read versionNotes
do
  echo "  $versionNotes" >> "source/application.yml"
done
Run Code Online (Sandbox Code Playgroud)

没有正确结束输入(因为我来不及查找空字符串的匹配项)。

scripting bash

32
推荐指数
4
解决办法
9万
查看次数

Linux 管理员如何提高他们的 shell 脚本和自动化技能?

在我的组织中,我与一群 NOC 员工、初出茅庐的初级工程师和少数高级工程师一起工作;所有这些都专注于 Linux。公司培养人才的一个有趣步骤是,有一条从 NOC 到高级工程队伍的途径。将人才库视为一个相对较新的人,我发现随着时间的推移,技能组合存在分歧……

  • 有些工程师非常了解一种或几种特定技术并不断沉浸其中……例如 MySQL、防火墙、SAN 存储、负载平衡器……
  • 还有其他人是通才,可以驾驭多种技术。
  • 所有人都学习了足够的 Linux(命令、进程)来做他们每天需要和使用的事情。

一些员工之间的一个区别因素是他们对脚本、自动化和配置管理方法的接受程度。例如,我们有两名工程师负责 Amazon AWS CloudFormation的大部分工作,另一名负责处理大部分Puppet基础设施。也许四分之一的工程师精通 BASH shell 脚本。

就业市场DevOps 技能的需求非常高的背景下,我很好奇其他组织如何促进这些技能的发展并培养他们的内部人才。脚本编写似乎不是一个特别可教的概念。

  • 系统管理员如何改进他们的 shell 脚本?
  • 没有/无法跟上 DevOps 范式的工程师还有一席之地吗?
  • 我们是否只是假设随着这些技术的发展,有些人会被抛在后面?可以吗?

automation scripting linux configuration-management puppet

30
推荐指数
4
解决办法
4276
查看次数

如何找出正在运行的 Linux 版本?

有时您的脚本需要在不同的 Linux 上表现不同。如何确定脚本在哪个版本的 Linux 上运行?

scripting linux

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

在 Windows bat 脚本中,For 循环从 1 到 n 计数

我需要在 bat 脚本文件中运行 Windows 命令 n 次。我知道如何使用各种编程语言执行此操作,但无法在 Windows 命令行上正确执行:-(

我希望有类似的东西

for(int i = 0; i < 100; i++) {
   // do something
}
Run Code Online (Sandbox Code Playgroud)

甚至这个(虽然不完全是认真的)

1.upto(100, {
   // do something
}) 
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑

我可以用 java、perl、c 或任何会生成 bat 脚本的程序编写如下所示

for %%N in (1 2 3 4 5 6 7 8 9 10 11 12) do echo %%N
Run Code Online (Sandbox Code Playgroud)

等等。甚至“更好”:

echo 1
echo 2
echo 3
echo 4
echo 5
echo 6
echo 7
echo 8
echo 9
echo 10
echo 11
echo 12 …
Run Code Online (Sandbox Code Playgroud)

scripting windows batch

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

如何配置 postfix 以将所有传入电子邮件通过管道传输到脚本?

使用 postfix,我希望将所有传入邮件发送到任何地址(包括那些未映射到本地用户的地址)通过管道传输到脚本。我试过配置mailbox_command/etc/postfix/main.cf

mailbox_command = /path/to/myscript.py
Run Code Online (Sandbox Code Playgroud)

如果用户是本地用户,这很有效,但对于没有别名的“未知”用户则失败。我尝试设置luser_relay为本地用户,但这会抢占mailbox_command,因此该命令不会运行。我尝试设置local_recipient_maps=(空字符串),但消息仍然被退回(未知用户)。

是否有我可以使用的魔术调用来让所有已知和未知用户也转到脚本?

完整/etc/postfix/main.cf如下——它是默认的 Ubuntu 10.04,除了以下mailbox_command行:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job. …
Run Code Online (Sandbox Code Playgroud)

scripting postfix

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

如何鼓励 Windows 管理员学习脚本?

当我在第一份工作中担任管理员时,我对 Windows 服务器的管理流程是一系列点击操作感到沮丧。我们永远无法与 Unix 服务器的效率水平相提并论,因为它有一组 shell 脚本来自动化大量工作。我很快就读到了 WSH 和ADSI并立即了解了我能够通过脚本实现多少自动化。

但是有一个很大的问题 - 我的 Windows 同事几乎没有一个真正对学习脚本感兴趣。他们似乎对手动点击鼠标的琐事很满意,并且对使用脚本代表他们完成工作的前景从不感到兴奋。尽管效率明显提高,但我还是努力说服他们学习脚本技能。此后,我离开了那份工作,开始了全职软件开发职业。

在各种环境和不同客户中工作了将近十年,我仍然遇到 Windows 管理员主要拥有这种一般的“情绪”,他们会尽可能避免编写脚本。尽管可访问性水平不断提高,但 Windows 服务器技术正在为脚本和自动化开放。我几乎可以肯定,大多数管理员都是管理员,因为他们绝对讨厌执行任何类型的编程职责。从长远来看,有哪些方法可以鼓励和激励管理员脚本编写确实可以帮助他们?

scripting windows

26
推荐指数
3
解决办法
1184
查看次数

使用 %time% 变量的批处理脚本需要前导零

我在 DOS 脚本中遇到了一个错误,该错误使用日期和时间数据进行文件命名。问题是我最终出现了一个差距,因为时间变量没有自动提供小时 < 10 的前导零。所以运行> echo %time% 返回:'9:29:17.88'。

有没有人知道有条件地填充前导零来解决这个问题的方法?

更多信息:我的文件名设置命令是:

set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
Run Code Online (Sandbox Code Playgroud)

最终是:C:\Temp\robolog_20100602_93208.log(早上 9:23)。

这个问题和这个有关。

谢谢

scripting windows time batch

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

如何在 PowerShell 脚本中使用配置文件(ini、conf、...)?

是否可以将配置文件与 PowerShell 脚本一起使用?

例如配置文件:

#links
link1=http://www.google.com
link2=http://www.apple.com
link3=http://www.microsoft.com
Run Code Online (Sandbox Code Playgroud)

然后在 PS1 脚本中调用此信息:

start-process iexplore.exe $Link1
Run Code Online (Sandbox Code Playgroud)

scripting powershell

25
推荐指数
4
解决办法
8万
查看次数