$ touch {a,b,c,"white space"}.sample
$ ls *.sample
a.sample c.sample
b.sample white space.sample
$ for SAMPLE in *.sample; do mv -v "$SAMPLE" "${SAMPLE%.sample}"; done
a.sample -> a
b.sample -> b
c.sample -> c
white space.sample -> white space
Editar : veja também ${parameter#word} , que exclui word da frente de parameter :
$ FILENAME=140909_stats_report.txt
$ echo "${FILENAME#140909_}"
stats_report.txt
Eu me lembro de qual delas eu preciso das posições das chaves # e % no meu teclado (Reino Unido): # é deixado de % então corresponde à esquerda. Antes eu percebi que tinha que checar a página de manual todo tempo: ~)
Essas expansões também oferecem suporte a curingas de shell:
$ echo "${FILENAME%.*}"
140909_stats_report
Os formulários # e % correspondem à menor expansão de word . Você pode usar ## ou %% para a correspondência mais longa. Por exemplo:
$ FILENAME=140909_stats_report.txt
$ echo "${FILENAME#*_}" # match as little as possible
stats_report.txt
$ echo "${FILENAME##*_}" # match as much as possible
report.txt
Vale a pena lidar com essas expansões. Há vários outros, incluindo suporte de regex (um pouco irritadiço), substrings e maneiras de definir padrões ou obter comprimentos variáveis. Man bash , claro.