我有一个 Linux 中的文件列表,我想缩短它们。它们的格式如下:WhatIWant_WhatIDoNotWant.txt。
有没有一种简单的方法来制作它们:WhatIWant.txt?我看到了以下问题(下面的链接),我真的很喜欢 for do 循环(以防万一结果有重复),但我不知道如何获取下划线(_)的位置值以将其输入而不是使用第 16 个字符作为结束点......
答案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