Comando Shell per rimuovere l'estensione dei file

Ho una directory con i file generati automaticamente che finiscono con l'estensione .sample. Vorrei avere un modo per rimuovere l'estensione .sample da tutti in un command terminal.

Ho provato questo:

mv ./{$1}*.sample ./$1 

Ma non funziona perché posso definire il {$ 1} nel posto o nel modo sbagliato. Qualcuno può indicare la giusta direzione?

Grazie in anticipo.

  • Unix per eseguire ripetutamente i comandi sulla shell senza utilizzare crontab
  • Quali comuni scaffali sono illegali nei file system di Unix e WIndows?
  • Qual è la prima cosa che controlli quando un server unix inarrestabile comincia a sconfiggere?
  • Come sostenere completamente un'image Linux e caricarla in un altro server?
  • Nginx per apache reverse proxy, istruire l'uso di socket unix
  • eliminare systemd servizi non trovati
  • Il modo più semplice per submit file di posta elettronica tramite la row di command in * nix?
  • Come redirect localmente le richieste DNS in un ambiente * NIX
  • 5 Solutions collect form web for “Comando Shell per rimuovere l'estensione dei file”

    Uno dei tanti modi per farlo:

     for i in *.sample; do NEWNAME=`echo "$i" | sed 's/\.sample//'`; mv "$i" "$NEWNAME"; done 
     $ 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 

    Modifica : vedi anche ${parameter#word} , che cancella word dalla parte anteriore del parameter :

     $ FILENAME=140909_stats_report.txt $ echo "${FILENAME#140909_}" stats_report.txt 

    Ricordo quale di questi ho bisogno dalle posizioni dei tasti # e % sulla mia tastiera (UK): # è rimasto di % quindi corrisponde a sinistra. Prima ho notato che wherevo controllare each volta la pagina dell'uomo: ~)

    Queste espansioni supportno anche le wildcards delle shell:

     $ echo "${FILENAME%.*}" 140909_stats_report 

    Le forms % e % corrispondono alla più breve espansione della word . Puoi utilizzare ## o %% per la partita più lunga. Per esempio:

     $ 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 la pena di farsi alle prese con queste espansioni. Ci sono diversi altri, inclusi il supporto (regex), sottostringhe e modi per impostare i valori predefiniti o get lunghezze variables. Naturalmente, l' uomo bash .

     for n in *.sample ; do mv "$n" "$(basename "$n" .sample)" ; done 

    Il command di rename accetta espressioni Perl:

     rename 's/\.sample$//' *.sample 

    Esempio:

     $ ls *sample* file0.sample file2.sample foo.sample.sample file1.sample file3.sample with space.sample $ rename 's/\.sample$//' *.sample $ ls *sample* foo.sample 

    Nel mio sistema di Ubuntu, la rename è collegata a symlink allo script di prename dal pacchetto perl .

     rename '.sample' '' *.sample 

    Su Fedora, il command di rename è incluso nel package util-linux-ng .

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.