Articles of bash

recursion地“规范化”文件名

我的意思是摆脱特殊字符的文件名等 我已经做了一个脚本,可以recursion重命名文件[http://pastebin.com/raw.php?i=kXeHbDQw]: 例如:之前: THIS is my file (1).txt 运行脚本之后: This-is-my-file-1.txt 好。 这里是: 但是:当我想要“完全”testing它,像这样的文件名: ¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÂÃÄÅÆÇÈÊËÌÎÏÐÑÒÔÕ×ØÙUÛUÝÞßàâãäåæçèêëìîïðñòôõ÷øùûýþÿ.txt áíüűúöőóéÁÍÜŰÚÖŐÓÉ!"#$%&'()*+,:;<=>?@[\]^_`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ''“”•–—˜™š›œžŸ¡¢£.txt 它失败[http://pastebin.com/raw.php?i=iu8Pwrnr]: $ sh renamer.sh directorythathasthefiles mv: cannot stat `./áíüűúöőóéÁÍÜŰÚÖŐÓÉ!"#$%&\'()*+,:;<=>?@[]^_`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ''“”•–—˜™š›œžŸ¡¢£': No such file or directory mv: cannot stat `./áíüűúöőóéÁÍÜŰÚÖŐÓÉ!"#$%&\'()*+,:;<=>?@[]^_`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ''“”•–—˜™š›œžŸ¡¢£': No such file or directory mv: cannot stat `./áíüűúöőóéÁÍÜŰÚÖŐÓÉ!"#$%&\'()*+,:;<=>?@[]^_`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ''“”•–—˜™š›œžŸ¡¢£': No such file or directory mv: cannot stat `./áíüűúöőóéÁÍÜŰÚÖŐÓÉ!"#$%&\'()*+,:;<=>?@[]^_`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ''“”•–—˜™š›œžŸ¡¢£': No such file or […]

使用排除列表查找在bash中查找的目录

现在,在你认为“之前已经完成”的情况下,请继续阅读。 和大多数试图findbash脚本的人一样,你最终将脚本硬编码为一行命令,但最终会在接下来的几个月/几年里编辑这个东西,所以你最终希望你做对了第一次。 我正在编写一个小的备份程序来做备份目录,并且需要find它们,而不是需要排除的directorie列表。 说起来容易做起来难。 让我来设置舞台: #!/bin/bash BasePath="/home/adesso/baldar" declare -a Iggy Iggy=( "/cgi-bin" "/tmp" "/test" "/html" "/icons" ) IggySubdomains=$(printf ",%s" "${Iggy[@]}") IggySubdomains=${IggySubdomains:1} echo $IggySubdomains exit 0 现在在这个结尾你得到/ cgi-bin,/ tmp,/ test,/ html,/图标这certificate了这个概念的作用,但现在需要进一步我需要使用find来searchBasePath并search只有一个级别的所有子目录,并排除列表中的子目录… 如果我手工input它将是: find /var/www/* \( -path '*/cgi-bin' -o -path '*/tmp' -o -path '*/test' -o -path '*/html' -o -path '*/icons' \) -prune -type d 我应该也许想循环到每个子目录,并做同样的事情…我希望你明白我的观点。 所以我试图做的似乎是可能的,但我有一个问题, printf“,%s”不喜欢我使用所有这些发现-path或-o选项。 […]

为什么`read -t`不能在RHEL的bash中超时?

为什么read -t在RHEL5或RHEL6上从pipe道读取时没有超时? 这里是我的例子,它不会在我的RHEL盒上超时从pipe道读取: tail -f logfile.log | grep 'something' | read -t 3 variable 如果我正确read -t 3应该在3秒后超时? 提前谢谢了。 克里斯 GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

在unix / linux命令行(例如BASH)中定义函数

有时候,我有一个单独的内容,我为了一个特定的任务重复了很多次,但是可能永远不会以完全相同的forms再次使用。 它包含一个我从目录列表中粘贴的文件名。 之间的某处并创build一个bash脚本我想也许我可以在命令行创build一个单线程函数,如: numresults(){ ls "$1"/RealignerTargetCreator | wc -l } 我已经尝试了一些使用eval的方法,使用了numresults=function… ,但还没有find正确的语法,到目前为止还没有发现任何东西。 (所有的东西都是关于bash函数的教程)。

为什么我的git没有自动更新Expect脚本?

我想创build一个脚本来更新我所有的GitHub仓库。 我只需要input我的用户名和密码,脚本将通过一个存储库列表,调用git push并通过补充的Expect脚本提供必要的信息。 这是我的bash脚本: #! /bin/bash echo "Updating GitHub projects from project_list.txt." echo read -p "GitHub username: " un read -p "GitHub password: " -s pw echo echo while read line do eval dir=$line echo "Updating:" $dir"." cd $dir $SF/githubexpect $un $pw echo echo done < $SF/project_list.txt $SF是一个全局环境variables,包含我的脚本文件夹的绝对path。 这是githubexpect脚本: #! /usr/bin/expect set un [lindex $argv […]

BASH – 只打印path中最深的目录

我需要一些帮助….. 在我的.bashrc文件中,我有一个非常有用的函数(它可能有点粗糙,准备好了,有点古怪,但它工作得很好!)读取input文件,并在每个文件上使用“树”input行来创build一个目录树。 这棵树然后被打印到一个输出文件(和文件夹的大小一起)。 multitree() { while read cheese do pushd . > /dev/null pushd $cheese > /dev/null echo -e "$cheese \n\n" >> ~/Desktop/$2.txt tree -idf . >> ~/Desktop/$2.txt echo -e "\n\n\n" >> ~/Desktop/$2.txt du -sh –si >> ~/Desktop/$2.txt echo -e "\n\n\n\n\n\n\n" >> ~/Desktop/$2.txt popd > /dev/null done < $1 cat ~/done } 这是一个节省时间没有结束,并输出一个片段,如下所示: ./foo ./foo/bar […]

Ansible权限问题

我试图将当前用户添加到系统中的一个组中,然后执行一个需要该组权限的命令。 我的手册是这样的: – name: Add this user to RVM group sudo: true user: state=present name=vagrant append=yes groups=rvm group=rvm – name: Install Ruby 1.9.3 command: rvm install ruby-1.9.3-p448 creates=/usr/local/rvm/bin/ruby-1.9.3-p448 问题是,所有这些都发生在同一个shell中。 stream浪者的shell还没有被新的组更新。 是否有一种干净的方式来刷新Ansible中的用户当前组? 我想我需要得到它重新连接或打开一个新的shell。 不过,我试图打开一个新的壳,它只是挂起: – name: Open a new shell for the new groups shell: bash 当然,它永远不会退出! 与newgrp相同的东西 – name: Refresh the groups shell: newgrp 因为它基本上做同样的事情。 […]

sed与特殊字符

我有我想要使用sed的这一行: –> ASD = $start ( *.cpp ) <– $ start不是可变的,我想用sed来代替所有的行: ASD = $dsadad ( .cpp ) 我怎样才能使sed忽略特殊的charactars,我试图在特殊字符之前加斜杠,但也许我错了,有人可以给我一个例子吗? 这是我想要的: sed's / CPPS = \ $(shell ls | grep * .cpp)/ somereplace /'Makefile

在disown和注销后可以看到输出到stdout吗?

我已经完成了这个程序:ctrl-z disown -h%1 bg 1 然后注销, 我仍然有可能看到那个程序输出到stdout现在吗?

正则expression式的Linux文件权限(数字符号)

我不能为我的生活找出适当的正则expression式。 我正在寻找的是一个正则expression式来匹配Linux文件权限的有效数字表示(例如,740为全读取无,777为全部)。 到目前为止我已经尝试了以下内容: strtotest=740 echo "$strtotest" | grep -q "[(0|1|2|3|4|5|7){3}]" if [ $? -eq 0 ]; then echo "found it" fi 上面的问题是正则expression式匹配1-5或7任何东西,不pipe其他字符。 例如,如果strtotest直接的被改为709 ,则条件是成立的。 我也试过[0|1|2|3|4|5|7{3}]和[(0|1|2|3|4|5|7{3})]以及。 是我正在使用的正则expression式错了,还是我错过了一些必须处理的grep ?