将文件重命名为文件名的前缀和中间部分

苏多科学

我有一个脚本,它在某一时刻可以执行以下操作:

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

don_crissti

要重命名stuff-X.js.teststuff.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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将文件名从大写重命名为小写

将隐藏文件重命名为它们的文件名,..(双点)

如何将文件重命名为文件名中的子字符串?

将文件重命名为带有文件名的列表

将文件重命名为已存在的文件名

将图像重命名为exif时间:创建唯一的文件名

将文件名中的特殊字符重命名为下划线

Bash:将文件名重命名为修改日期的unix时间戳

OSX / MacOs 批量将十六进制文件名重命名为十进制文件名

bash:当前缀太短时,使用重命名为左填充文件名,且下标为零

使用Java将文件名列表重命名为另一个列表的文件名

如何将文件名中带有“-yyyy mm dd hh mm”的所有文件重命名为日期/时间之前的部分?

使用find命令将文件重命名为不带扩展名的相同文件名

在Windows 10中,如何将文件重命名为包含带有变音符的字符的文件名?

将多个文件夹中的重复文件名重命名为另一个名称

如何将文件重命名为其创建日期和哈希值相结合以实现唯一文件名?

从文件名中提取文本并将文件重命名为 grep 文本?

如何递归地将目录树重命名为有效的 Windows 文件名?

如何在php中解析文件名并重命名为某个名称

将目录中的100个文件重命名为存储在文本文件中的新文件名

将zip文件大量重命名为原始名称,但删除部分名称

对于目录,将具有子目录名称+旧文件名的子目录中的文件重命名为新目录

正则表达式-将文件重命名为文件名中的最高分辨率

将目录中的所有文件重命名为其文件名的md5哈希(不包含内容)

将文件重命名为其BASE64

将多个文件重命名为其后缀

终端:将多个文件重命名为数字顺序

自动将.rdf文件重命名为.XML

如何将文件重命名为..(点点)?