2009-09-30 13 views

risposta

30

provare questo (questo funziona in pianura vecchio Bourne sh così):

for i in *000.tga 
do 
    mv "$i" "`echo $i | sed 's/000//'`" 
done 

Entrambi gli argomenti sono avvolti in citazioni per sostenere spazi in i nomi dei file.

+0

+1 per la maggior parte delle soluzioni portatili (e perché sono in esecuzione su un upscote troppo basso per continuare a fare inversione di tutte le buone risposte). –

33

Bash può fare sed -come sostituzioni:

for file in *; do mv "${file}" "${file/000/}"; done 
+0

funziona bene su OS X (10.6.8). Pratico e succinto. Grazie. – jamesnotjim

+0

Bello, puoi spiegare la funzione di "{"? – efrem

+0

@efrem: le parentesi graffe rappresentano un delimitatore opzionale per i nomi delle variabili e sono necessarie per le estensioni dei parametri. Vedi il [Bash Manual] (https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion) per ulteriori informazioni. –

8

una soluzione non-bash, perché so due manifesti veloci hanno già coperto che:

C'è un eccellente programma di breve perl chiamato rename che viene installato di default su alcuni sistemi (altri hanno un programma di rename meno utile) . Esso consente di utilizzare regex perl per la ridenominazione, per esempio:

rename 's/000//' *000*.tga 
4
#!/bin/bash 
ls | while read name; do 
    echo mv $name ${name/$1//} 
done 
+1

+1: adoro il '| mentre leggi il costrutto. – Cascabel

+3

In che modo "ls | while read name" è migliore di "per nome in *"? –

+0

@Laurence Gonsalves: l'uso di caratteri jolly della shell espande la riga di comando e c'è un limite non troppo grande. "while read" evita che – Javier

Problemi correlati