Articles of unix

比较两个目录中的文件和版本,其中一个具有符号链接?

我们正在将一些旧的项目的工具移到一个新的版本控制版本(在同一个磁盘上,使用不同的用户名),我的任务是查找旧帐户中的实用程序新的,并find两个帐户之间的不同文件。 新帐户已经运行了大约一年,人们对旧文件中的某些文件做了(小的)更改,而没有将其更改为新文件。 这些实用程序在远程服务器上,我只能读取(除了我自己的主文件夹)。 旧帐户称为user1,在〜user1 / bin /文件夹中包含所有实用程序,包括每个实用程序的源代码,可执行文件和脚本。 新帐户user2已经被设置为〜user2 / bin /文件夹中的每个“可执行文件/脚本”与子文件夹〜user2 / src / {utilityname} /中的相应文件的符号链接,还包含该可执行文件的来源。 有没有比这两个目录比较容易的方法 find ~user1/bin/ -maxdepth 1 -printf '%s, %p\n' | sort -k2 > user1.txt find -L ~user2/bin/ -maxdepth 1 -printf '%s, %p\n' | sort -k2 > user2.txt 并手动比较结果,看看有什么不同/缺less? 另外,上面的命令只会比较〜user2 / bin /文件夹中的可执行文件/脚本,即使user1和user2之间的user2 / src / {utilityname} /中的源代码相同,例如,脚本中的不同path)。 是否有可能search一个实用程序的符号链接目标所在的文件夹为同名的源文件,以便我可以直接比较user1和user2之间的源文件?

使用Linux删除短于4个字符的单词

我已经阅读了下面的内容,并尝试重写我想要的命令逻辑。 但是,我只是无法做到。 在bash中删除长度小于2的单词 试过: echo $example | sed -e 's/ [a-zA-Z0-9]\{4\} / /g' echo $example | sed -e 's/ [a-zA-Z0-9]\{4\} / /g' 使用sed删除所有大于6个字符的单词 试过: sed -e s'/[A-Za-z]\{,4\}//g' 请帮助我一个简单的awk或sed命令以下内容: Here is an example line of fantastic data 并得到: Here example line fantastic data

计数器循环pipe道grep似乎意外地随机

尝试在5次迭代中让grep停止一个while循环,这样/ tmp / foo应该只有5行: n=1 while [ $n -le 2000 ] do echo $n n=$(( $n + 1 )) done | tee /tmp/foo | grep -q ^5 支票计数: wc -l < /tmp/foo 输出: 34 上面的重复运行每次最多返回不同的数字,但并不是非常随机的 – 在bash中运行5000次以上,例如1500秒左右运行5000次, 短跑运行157次106秒。 这些结果似乎比最初的实验更有趣。 这段代码发生了什么?

使用相同的密钥循环访问关联数组

我目前正试图循环通过一个关联数组。 该数组包含具有相同键的值。 但是,当我尝试循环时,我只得到一组结果。 我怎样才能遍历包含相同的密钥的所有值? #!/bin/bash/ declare -A details=( [dog]="golden retriver" [cat]="bengal" [bird]="eagle" [dog]="bulldog" [cat]="sphynx" [bird]="parakeet" ) for k in "${!details[@]}" do echo $k — ${details[$k]} done 结果: 猫— sphynx 狗—牛头犬 鸟—鹦鹉

从Vim里面如何取代所有行中的第二个模式?

我有像这样的线条: EXPORT var value 从Vim里面,我希望能够转换成: EXPORT var=value :%s/ /=/g将会转换两个空格。

如何将文件移动到参数path?

说我有以下代码, mkdir $1 # Output that the folder was created and the name echo "The folder was created and name is: `echo $1`" touch $2 # Output that the file was created and the name echo "The file was created and name is: `echo $2`" 我怎样才能将创build的文件移动到创build的参数文件夹?

Linux读取()最小数据量

当在Linux中使用read()系统调用来从任何源文件(文件,套接字,pipe道)读取时,是否存在可以返回的最小数据量(在阻塞模式下)? 或者系统调用甚至可以返回1个字节? 当我想从pipe道中读取一个int(4或8字节)时,是否还需要检查read()的返回值以查看是否收到了小于sizeof(int)的字节?

awk – 如何“重新awk”输出?

我需要一个文件并计算$ 7的出现次数 – 我已经用awk做了这个(因为我需要通过更多的awk来运行这个) 我想要做的就是把它合并成一个脚本 – 到目前为止我已经有了 #! /usr/bin/awk -f # get the filename, count the number of occurs # <no occurs> <filename> { print $7 | "grep /datasheets/ | sort | uniq -c"} 我如何获取输出,并通过更多的awk命令运行它 – 在同一个文件中 最终,我需要能够运行 ./process.awk <filename> 所以它可以成为以前的设置的替代品,这将花费太多时间/ effor来改变 –

在别名中设置printf

可能重复: bash别名中的variables插值 这个命令用来在bash shell中设置我的控制台的标题 printf "\033]0; my_console_title \007"; 但是我想用这个命令别名,并应该接受来自用户的控制台标题(无法将printf设置为别名variables)。 类似于: alias fx="find . -type f | xargs grep -il $1" 用法: fx "search_text"

如果另一个实例被调用,重新运行bash脚本

我有一个可以同时调用多次的bash脚本。 要保护脚本访问的状态信息(保存在/tmp文件中),我正在使用像这样的文件locking: do_something() { … } // Check if there are any other instances of the script; if so exit exec 8>$LOCK if ! flock -n -x 8; then exit 1 fi // script does something… do_something 此脚本运行时调用的任何其他实例退出。 如果有n个同时调用,而不是n次,我希望脚本只运行一个额外的时间,如下所示: do_something() { … } // Check if there are any other instances of the script; if […]