小编atx*_*dba的帖子

bash条件:如何"和"表达式?(如果[!-z $ VAR && -e $ VAR])

我想我不清楚如何做"和"测试.我想确保存在一个运行良好的参数,[ -e $VAR ]但结果是在空字符串上也评估为true; 这是我不想要的.

我怎么样和'他们在一起?还是有另一个一元测试来完成我想要的东西?

bash shell

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

find -name"*.xyz"-o -name"*.abc"-exec to对所有找到的文件执行,而不仅仅是指定的最后一个后缀

我想跑

find ./ -name "*.xyz" -o -name "*.abc" -exec cp {} /path/i/want/to/copy/to
Run Code Online (Sandbox Code Playgroud)

实际上它是一个更大的名称扩展列表,但我不知道这个例子的重要性.基本上我想把所有找到的东西复制到另一个/ path/i/want/to/copy/to.但是它似乎只是在列表中执行最后一个名称测试.

如果我删除-exec部分,我打算找到我希望找到的所有文件变体.

如何让它传递给-exec的完整文件?

linux bash shell scripting

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

用于查找与通配符匹配的文件总大小的简短命令

我可以设想一个简单的shell脚本,它可以通过遍历目录中的文件列表并总结单个大小来实现我想要的,但是想知道是否已经有更简洁的方法来做到这一点.

就像是

ls -lh *.jpg
Run Code Online (Sandbox Code Playgroud)

这给了我目录中所有jpg文件的总大小

linux bash

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

递归复制到相对目标路径

我想的是我想要完成的事情可以用内置的shell工具来完成,而不需要更复杂的脚本.

我想找到路径中的所有文件并将它们复制到目标基本路径,保留它们所在的相对路径.

例:

说我跑了:

[~:] find /path/src  \( -name "*.jpg" -o -name "*.gif" \) 
Run Code Online (Sandbox Code Playgroud)

并返回:

/path/src/a.jpg
/path/src/dir1/b.jpg
/path/src/dir2/dir3/c.gif
Run Code Online (Sandbox Code Playgroud)

我希望他们最终都进入:

/path/dest/a.jpg
/path/dest/dir1/b.jpg
/path/dest/dir2/dir3/c.gif
Run Code Online (Sandbox Code Playgroud)

我尝试了一个-exec cp {} /path/dest \;标志,find但只是将所有内容转储到/ path/dest中.例如:

/path/dest/a.jpg
/path/dest/b.jpg
/path/dest/c.gif
Run Code Online (Sandbox Code Playgroud)

bash shell

8
推荐指数
2
解决办法
2908
查看次数

是否有命令返回文件的所有者?

是否有shell命令只打印文件的所有者?

我想我可以做到:

ls -l  | awk '{print $3}'
Run Code Online (Sandbox Code Playgroud)

但这感觉就像问题会有一个更直截了当的答案.

linux shell scripting

6
推荐指数
1
解决办法
728
查看次数

让puppet有条件地执行多个命令

我有一个工作的puppet配置来帮助在机器上安装mysql实例.我的环境设置为在同一台机器上运行多个实例(具有不同的配置/端口/等).

我在清单中的基本设置看起来像

File{
    owner => $owner,
    group => $group,
    before => Exec["mysql_install_db-${name}"],
}

exec{"mysql_install_db-${name}":
    creates => "/var/lib/mysql/${name}/mysql",
    command => "/usr/local/percona/mysql-${version}/usr/bin/mysql_install_db --user=mysql --datadir=/var/lib/mysql/${name} --basedir=/usr/local/percona/mysql-${version}/usr",
    logoutput => true,
}
Run Code Online (Sandbox Code Playgroud)

这非常好用,但是现在我想修改这个安装过程来运行一些后续命令,用一些内部存储过程来引导全新安装,并为新安装做一些其他的"准备工作".

命令基本上就像

mysql -u user < /path/to/bootstrap1.sql
mysql -u user < /path/to/bootstrap2.sql
mysql -u user < /path/to/bootstrap3.sql
Run Code Online (Sandbox Code Playgroud)

我只希望这些运行一次,在mysql_install_db命令之后,但有点在同一"创建"后卫.

我发现了一些只是将数组传递给命令参数的引用,但该引用的形式是错误报告并不总是一致地工作.

什么是首选的方法来完成这样的事情,并确保命令以确定的顺序执行,并且只有在运行mysql_install_db之后?

mysql puppet

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

在python中为什么要使用除了:

在python中它是真的,except Exception as ex或者except BaseException as ex是相同except:但你得到了对异常的引用?

从我的理解BaseException是更新的默认全能.

除此之外,为什么你只想要一个except:条款?

python exception-handling

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

在Python中很容易序列化/toString一组元组

假设我有一套像

s=([1,2],[2,3])
Run Code Online (Sandbox Code Playgroud)

我想做类似“\n”.join(s) 的事情,但随后得到一个TypeException关于

expecting a string and getting a tuple
Run Code Online (Sandbox Code Playgroud)

python

3
推荐指数
1
解决办法
3822
查看次数

尝试在python中捕获编码模式

我正在处理一组第三方python脚本.我注意到这种枚举许多不同Exception类的一般模式,没有采取不同的操作,但记录了将被捕获的异常的字符串表示.

except AttributeError as ae:
        print("Attribute Error while processing the configuration file!\n{0}\n".format( str(ae) ) )
        intReturnValue = 1
    except IndexError as ie:
        print("Index Error while processing the configuration file!\n{0}\n".format( str(ie) ) )
        intReturnValue = 1
    except NameError as ne:
        print("Name Error while processing the configuration file!\n{0}\n".format( str(ne) ) )
        intReturnValue = 1
    except TypeError as te:
        print("Type Error while processing the configuration file!\n{0}\n".format( str(te) ) )
        intReturnValue = 1
    except:
        print("Unexpected error while processing the configuration file!\n{0}\n".format( sys.exc_info()[0] ) ) …
Run Code Online (Sandbox Code Playgroud)

python

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

正则表达式匹配bash中的整个字符串(不是子字符串)

我希望这只输出"匹配!" 如果只传递单个字符"a"或"b"作为参数.不是aaaaa,不是bcfqwefqef,不是qwerty.

#!/bin/bash
P="a|b"
if [[ "$1" =~ $P  ]]; then
    echo "match!"
else
    echo "no!"
fi
Run Code Online (Sandbox Code Playgroud)

是的,我已经通过一些SO帖子来实现这一点.将$ P加入引号也不起作用.

bash

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

标签 统计

bash ×5

shell ×4

linux ×3

python ×3

scripting ×2

exception-handling ×1

mysql ×1

puppet ×1