我接手了一个项目,该项目包含 100 多个 shell 脚本,分布在一个相当大的文件系统上。我正在寻找一种简洁的方法来查找.sh
目录及其子目录中的所有文件,并将其替换#!/bin/bash.*
为:
#!/bin/bash +x
echo "[$(date +%H:%M:%S)] PWD:$PWD -- $(dirname "$0")/$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")" >> /script-log
我目前正在使用 sublime 来完成版本控制中的内容任务...然而这对我已经部署的项目没有帮助。
find
我认为++的组合可以做到这一点grep
,awk
但我不太确定如何实现它。
答案1
您可以使用 find + sed 来完成您想要的操作。例如,以下命令将替换 shebang 并添加换行符。只需添加 echo 命令即可完成其余操作。
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/' {} \;