我有一个脚本,它在某一时刻可以执行以下操作:
for src in $(find -H "$ROOT_DIR" -maxdepth 5 -name '*.test' -not -path '*.git*')
do
fixed_filename=$(echo "$(basename "${src%.*}")" | sed 's/-test//')
基本上,我有一个名为 thing-test.js.test
遍历时,我想以文件名结尾 thing.js
最后,我将使用以下命令创建文件的完整路径 path="$ROOT_DIR"/"$fixed_filename"
上面的方法似乎有效,但绝对不正确-我是shellcheck的狂热用户,它告诉我存在无用的回显(我同意),并尝试进行${variable//search/replace}
尽可能的尝试。
希望能有一些帮助清理上面的内容。
编辑:
我想要做的基本要点是:
我试图递归地搜索目录中遵循特定文件名模式的每个文件,例如file-test.js.test
,这些文件内部是占位符变量,例如,REPLACEME
我想查找所有这些文件,并REPLACEME
用用户提供的字符串逐一替换bash脚本中的一个read调用,当我在那里时,我想将文件名更改为file.js
例如remove-test
和.test
要重命名stuff-X.js.test
为stuff.js
(之前不知道扩展名.test
),您将必须使用几个表达式来提取所需的部分,例如,将路径拆分为头尾h=${path%/*}
,t=${path##*/}
然后在破折号前获取字符串${t%%-*}
,中间的字符串获取,中间的字符串获取不带扩展名的名称例如,noext=${t%.*}
然后从该摘录中提取出新的扩展名,ext=${noext##*.}
如下所示:
find . -name '*-*.test' -exec sh -c 'h=${1%/*}; t=${1##*/}; noext=${t%.*};\
ext=${noext##*.}; fixed=${h}/${t%%-*}.${ext}; echo mv "$1" "$fixed"' sh {} \;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句