我已经inheritance了一个包含超过100倍的shell脚本的项目,这个脚本遍布在一个相当大的文件系统中。 我正在寻找一个干净的方式来查找所有.sh文件在目录及其子目录中,并用#!/bin/bash.*replace:
#!/bin/bash +x echo "[$(date +%H:%M:%S)] PWD:$PWD -- $(dirname "$0")/$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")" >> /script-log
我目前使用崇高来完成版本控制中的内容的任务…但是,这并不帮助我已经部署的项目。
我想组合find + grep + awk会这样做,但我不太清楚如何完成它。
你可以使用find + sed来完成你想要的。 例如下面的命令将会replaceshebang并添加换行符。 只需添加回声命令来完成剩下的工作。
find ./ -name '*.sh' -exec sed -i 's/\#\!\/bin\/bash.*/\#\!\/bin\/bash\ \+x\'$'\necho \"\[\$\(date \+\%H\:\%M\:\%S\)\] PWD:\$PWD -- \$(dirname "$0")\/\$(basename \"\$(test -L \"\$0\" \&\& readlink \"\$0\" || echo \"\$0\"\)\"\)\" \>\> \/scriptlog/' {} \;