缩短 Linux 文件名(截断符号)

缩短 Linux 文件名(截断符号)

我有一个 Linux 中的文件列表,我想缩短它们。它们的格式如下:WhatIWant_WhatIDoNotWant.txt。

有没有一种简单的方法来制作它们:WhatIWant.txt?我看到了以下问题(下面的链接),我真的很喜欢 for do 循环(以防万一结果有重复),但我不知道如何获取下划线(_)的位置值以将其输入而不是使用第 16 个字符作为结束点......

用于缩短文件名的 Linux 脚本或程序

答案1

变量扩展${varname%_*}将删除从(最后一个)_到字符串末尾的所有内容。

所以,例如

$ name=WhatIWant_WhatIDontWant.txt
$ echo "${name%_*}"
WhatIWant

请注意,它还会删除.txt.

所以我们可以构建一个简单的循环:

for name in *.txt
do
  mv -i -- "$name" "${name%_*}.txt"
done

如果你想要这个递归那么像

find . -name '*.txt' | while read -r "name"
do
  mv -i "$name" "${name%_*}.txt"
done

可能就足够了,但要注意是否有任何文件具有嵌入的返回字符;这会打破这个循环。

答案2

# We loop over the files with filename suffix .txt

for f in *.txt; do
    # We rename the file removing _ and the remaining part including the extension
    mv -- "$f" "${f/_*}.txt"
done

相关内容