rinominare più file con mmv o rename

Installazione, configurazione e uso di programmi e strumenti.
ssaa
Prode Principiante
Messaggi: 210
Iscrizione: lunedì 19 marzo 2007, 13:49
Località: Castellammare di Stabia-Napoli

rinominare più file con mmv o rename

Messaggio da ssaa »

salve, ho letto molte discussioni, senza capirci niente.

ho una accozzaglia di file, se voglio

1)rendere minuscolo il nome
2)privarlo di caratteri diversi da lettere e numeri
3)il carattere che segue un carattere diverso da una lettera o un numero deve diventare maiuscolo
come faccio?


ps. mi ero scritto un programmino in c/c++ ma mi crasha senza apparente motivo. riporto di seguito il sorgente, magari a qualcuno passa per la testa di dargli un'occhiata

Codice: Seleziona tutto

/*		massrename
 * 		rinomina i file secondo uno specifico path, migliorando la legibilità dei nomi e togliendo
 * 		caratteri che non siano lettere o numeri.
 * 		 
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *      
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *      
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */

#include <cstring>
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;

#define tempfile ".massrenameTempFile"

/***************************************************************************************************
 * DICHIARAZIONE DELLE FUNZIONI
 *
 * void usage();
 * void dir (const char *  directory);
 * void move(const char * surce, const char * dest);
 * bool valid(char c);
 * bool processneded(const char * str);
 * void downcase(char * str);
 * char * catchextension(const char * sting);
 * char * catchname(const char * sting);
 * char * recopy(const char * str);
 * void rename(const char * str);
 * 
 * */
void usage();
void dir (const char *  directory);
void move(const char * surce, const char * dest);
bool valid(char c);
bool processneded(const char * str);
void downcase(char * str);
char * catchextension(const char * str);
char * catchname(const char * str);
char * recopy(const char * str);
void rename(const char * str);

/***************************************************************************************************
 * FUNZIONE MAIN
 * */
int main (const int argc, const char * argv[])
{
	if (argc==3 && (strcmp(argv[1],"-f")==0 || strcmp(argv[1],"-d")==0) ){
		if (strcmp(argv[1],"-f")==0) {
			char * tmp=new char [strlen(argv[2])+1];
			strcpy(tmp,argv [2]);
			char * nome = catchname(tmp);
			if (processneded(nome))
				rename(tmp);
			delete [] tmp;
			delete [] nome;
		}
		else {
			char * current=get_current_dir_name();
			char buffer[256];
			dir(argv[2]);
			ifstream f(tempfile);
			chdir(argv[2]);
			while (f.getline(buffer,256))
			{
				char * tmp = new char [strlen(buffer)+1];
				strcpy(tmp,buffer);
				char * nome = catchname(tmp);
				if (processneded(nome))
					rename(tmp);
				delete [] tmp;
				delete [] nome;
			}
			chdir(current);
			remove(tempfile);
		}
	}
	else usage();
	return 0;
}

/***************************************************************************************************
 * IMPLEMENTAZIONE DELLE FUNZIONI DICHIARATE
 * */
/*
 * 
 */
void usage() {
	cout <<"Uso : massrename [-d | -f] [directory | file]" <<endl
	<<"-d : rename all internal directory's file;" <<endl
	<<"-f : rename a file;" <<endl;		
}
/*
 * 
 */
void move(const char * source,const char *  dest) {
	char * command = new char [strlen(source)+strlen(dest)+13];
    strcpy(command,"mv ");
    strcat(command,source);
    strcat(command," ");
    strcat(command,dest);
    strcat(command," &");
    system(command);
    delete []  command;
}
/*
 * 
 */
void dir (const char *  directory) {
	char * comando = new char [strlen(directory)+strlen(tempfile)+15];
    strcpy(comando,"dir -1 ");
    strcat(comando,directory);
    strcat(comando," > ");
    strcat(comando,tempfile);
    system(comando);
    delete []  comando;
}
/*
 *
 */
bool valid(char c) {
	if ( (c>='0' && c<='9') || (c>='A' && c<='Z') || (c>='a' && c<='z')  || c=='/' ) return true;
	else return false;
}
/*
 *
 */
bool processneded(const char * str) {
	register unsigned int i=0;
	while (i<strlen(str))
		if (!valid(str[i]))
			return true;
		else i++;
	return false;
}
/*
 *
 */
void downcase(char * str) {
	unsigned int l=strlen(str);
    for (register unsigned int i=0; i<=l; i++)
       if ( str[i]>='A'  && str[i]<='Z' )
                str[i] += 32;
}
/*
 *
 */
char * catchextension(const char * str){
	char * ext=0;
	if (str[strlen(str)-4]=='.')
	{
		ext= new char [5];
		for(int i=0; i<5;i++)
			ext[4-i]=str[strlen(str)-i];
		downcase(ext);
	}
	return ext;
}
/*
 *
 */
char * catchname(const char * str) {
	char * name=0;
	char * ext = catchextension(str);
	if (ext!=0) {
		int dim = strlen(str)-strlen(ext);
		name = new char [dim];
		strncpy(name,str,dim);
		name[dim]='\0';
		delete [] ext;
	}
	else {
		name = new char [strlen(str)+1];
		strcpy(name,str);
	}
	downcase(name);
	return name;
}
/*
 *
 */
char * recopy(const char * str)
{
	char * newstr= new char [strlen(str)+1];
	for (register unsigned int i=0,j=0; i<strlen(str); i++)
	{
		if(valid(str[i]))
		{
			newstr[j]=str[i];
			if (i>0 && !valid(str[i-1]) && !(newstr[j]>='0' && newstr[j]<='9') && (newstr[j]>='a' && newstr[j]<='z') )
				newstr[j]-=32;
			j++;
		}
	}
	return newstr;
}
/*
 * 
 */
void rename(const char * str)
{
	char * name=catchname(str);
	char * ext=catchextension(str);
	if (processneded(name))
	{
		char * newname=0;
		newname=recopy(name);
		if(ext!=0)
			strcat(newname,ext);
		move(str,newname);
		delete [] newname;
	}
}
Unix Is user friendly, it's just selective about who its friend are!
AnyWay
Prode Principiante
Messaggi: 46
Iscrizione: domenica 6 settembre 2009, 3:48
Località: AP
Contatti:

Re: rinominare più file con mmv o rename

Messaggio da AnyWay »

Io uso pyrenamer, ma non so se fa tutte queste cose che chiedi.
CHATTA con me.
Scrivi risposta

Ritorna a “Applicazioni”

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot] e 7 ospiti