gpt4 book ai didi

linux - 去除空格并将小写变为连字符 - 文件名

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:05 25 4
gpt4 key购买 nike

我有很多文本文件,我正在用特定格式重命名。下面我可以删除空格并小写。然而,这并不是我们想要的结果。

我如何才能格式化(去掉空格并变成小写)连字符之前的所有内容,然后只使用连字符后的第一个空格?

find /temp/ -depth -name "* *" -type f -exec rename 's/ +\././; y/A-Z /a-z_/' {} +

输入结果:

Hello Video - KEEP.txt

输出:

hello_video_-_keep.txt

期望的结果:

hello_video_-KEEP.txt

最佳答案

如果它是一个文件,我会使用:

sed -re 's/^([^-]*)-\s*([^\.]*)/\L\1-\U\2/' -e 's/ /_/g' file
  • s/^([^-]*)-\s*([^\.]*)/\L\1-\U\2/ 从头开始​​将所有内容转换为小写文件的长度到破折号 -。然后它转换为大写直到点。
  • s//_/g 将所有空格转换为下划线 _.

对于给定的文本,它返回:

hello_video_-KEEP.txt

如果你想保持单词从 -. 的原样,使用 \E 来恢复大小写。然后,我们也可以通过将它替换为 - 来摆脱多余的 _-(我知道有点难看)。

$ cat file
Hello Video - KEEP.txt
My File - KeEp.txt
$ sed -re 's/^([^-]*)-\s*([^\.]*)/\L\1\E-\2/' -e 's/ /_/g' -e 's/_-/-/g' file
hello_video-KEEP.txt
my_file-KeEp.txt

提醒一下,这些是更改大写/小写的方法:

  • \L - 将所有后续字符转换为小写
  • \U - 将所有后续字符转换为大写
  • \E - 保留所有后续字符的当前大小写

如何标记它有效?遍历 find 命令的结果:

while read -r file
do
new_file=$(echo "$file" | sed -re 's/^([^-]*)-\s*([^\.]*)/\L\1\E-\2/' -e 's/ /_/g' -e 's/_-/-/g')
echo "mv '$file' '$new_file'"
done < <(find . -type f ...)

对于给定的输入,这将产生以下内容:

mv './My File - KeEp.txt' './my_file-KeEp.txt'
mv './Hello Video - KEEP.txt' './hello_video-KEEP.txt'

一旦您确定它可以工作,只需删除 echo 并单独使用 mv。注意引号是必要的!!否则它将无法正确处理文件名中的空格。

关于linux - 去除空格并将小写变为连字符 - 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26218569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com