Elegancki sposób na pisanie plików pasków rozszerzeń na bash?

0

Oto mój skrypt bash:

for next in `ls | grep -P -o "[a-zA-Z0-9]*" | grep -v "^c$" | grep -v "^obj$" | grep -v "^sh$"`
do
  mv "$next.c.obj" $next
done

Jak widać, jest brzydka. Zasadniczo usuwa rozszerzenie .c.obj z plików (które, nawiasem mówiąc, dostały się tam, ponieważ zepsułem poprzedni skrypt). Działa, ale nie wygląda na najbardziej wydajne rozwiązanie.

Czyn został już zrobiony, więc proszę nie publikować innych sposobów (zmiana nazwy, sed lub awk).

Chcę tylko wiedzieć, czy można to zrobić tylko za pomocą grep i bash, ale bardziej elegancko.

Niraw
źródło
2
filename="foobar.c.obj"; echo "${filename%*.c.obj}"
Cyrus
for file in *.c.obj ; do [[ -f ${file%.c.obj} ]] || mv "$file" "${file%.c.obj}" ; done
choroba
Okej, właśnie tego chciałem zobaczyć. Powinieneś dodać je jako odpowiedzi. @choroba $ {var% coś} jest interesujący.
Nirav