示例文件:
RBFATL001USCGA002.--K1234--
RCAVTL001USCGA043.--K2135--
Run Code Online (Sandbox Code Playgroud)
输出:
RBFATL001USCGA002
RCAVTL001USCGA043
Run Code Online (Sandbox Code Playgroud)
总会有一个循环。可能你的意思是你想要一个工具来隐藏循环?
然后,您可以使用perl's rename(有时称为prenameor perl-rename):
rename 's/\.[^.]+\.*\z//s' ./*.*
Run Code Online (Sandbox Code Playgroud)
或zsh的zmv:
autoload zmv
zmv '(*).[^.]##.#' '$1'
Run Code Online (Sandbox Code Playgroud)
默认情况下,这些文件不会重命名隐藏文件(名称以 开头的文件.)。如果你也想处理这些,你会这样做:
zmv '(?*).[^.]##.#(#qD)' '$1'
Run Code Online (Sandbox Code Playgroud)
那些认为在 中.foo.bar.,扩展名是.bar.(并且不考虑foo...有扩展名)。如果您想将其视为.( zmv '(?*).*(#qD)' '$1'),则可以进行调整。我不希望你想考虑它.foo.bar.(这zmv '*(#qD)' '${f%%.*}'会剥离(但由于文件不能有空名称而失败))。
另请注意,在 中file.tar.gz,扩展名被认为是.gz,而不是.tar.gz。
要递归地做到这一点:
zmv '(**/)(?*).[^.]##.#(#qD)' '$1$2'
Run Code Online (Sandbox Code Playgroud)
或与rename:
find . -depth -name '?*.*' -exec rename 's/\.[^./]+\.*\z//s' {} +
Run Code Online (Sandbox Code Playgroud)