![修改命令以删除文件名末尾的数字](https://linux22.com/image/94138/%E4%BF%AE%E6%94%B9%E5%91%BD%E4%BB%A4%E4%BB%A5%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E5%90%8D%E6%9C%AB%E5%B0%BE%E7%9A%84%E6%95%B0%E5%AD%97.png)
全部,
我一直在弄乱 for 命令来批量删除文件名中的模式。
文件名示例:
:Common:CBE.key_44643_1
我可以使用以下命令删除 :Common: 部分。
for f in *; do mv "$f" "${f#:Common:}";done
对于我的一生,我无法获得删除 .key 右侧所有内容的命令。以下是我的尝试
for f in *; do mv "$f" "$(?<=crt)(?s)(.*$);done
命令运行但文件没有更改。我在 mac 上运行这个。
答案1
使用 shell 执行此操作的一种方法:
for f in *; do
mv -- "$f" "${f%.key*}.key"
done
答案2
假设文件名不包含换行符或反斜杠:
for f in ./*
do
mv "$f" "$(echo "$f" | sed 's/key_.*$/key/')
done