Scripts bash

Problemi di programmazione riguardante il linguaggio script Bash
Rispondi
Avatar utente
fatopeo
Messaggi: 22
Iscritto il: 05/05/2014, 20:59
Kernel: 3.12

Scripts bash

Messaggio da fatopeo » 12/05/2014, 21:46

Ho pensato di aprire questo thrad in modo che ognuno possa aggiungere degli scripts bash che possano agevolare gli utenti nell'uso quotidiano di linux velocizzando talune operazioni.

ELIMINARE GLI SPAZI DAI NOMI DEI FILES

Codice: Seleziona tutto

for i in *; do cp "$i" "`echo $i | sed "s/ //g"`"; done
oppure

Codice: Seleziona tutto

for i in *; do mv "$i" "`echo $i | sed "s/ //g"`"; done
RIDIMENSIONARE RICORSIVAMENTE DELLE IMMAGINI AD UNA CERTA RISOLUZIONE CON LA SUITE IMAGEMAGICK (PREINSTALLATA)

Codice: Seleziona tutto

find . -name "*.jpg" | xargs convert -resize 1280x1024 



Avatar utente
mae89
Messaggi: 1333
Iscritto il: 22/12/2010, 10:25
Distribuzione: Fedora
Kernel: 3.16.9
Architettura: x86_64
Contatta:

Re: Scripts bash

Messaggio da mae89 » 12/05/2014, 22:35

ottima iniziativa... io per le immagini ho spesso utilizzato mogrify (anch'esso contenuto in imagemagick se non erro) http://linuxmx.it/guide/generiche/98-mo ... agini.html
Chi dice di non essere capace è perché probabilmente non ha mai provato.

Avatar utente
sabayonino
Messaggi: 1482
Iscritto il: 16/01/2012, 20:47
Distribuzione: GentooKDE
Kernel: 4.4.6-gentoo-BFQ
Architettura: x86_64
Contatta:

Re: Scripts bash

Messaggio da sabayonino » 13/05/2014, 11:48

spostato nella sezione "bash"

Avatar utente
fatopeo
Messaggi: 22
Iscritto il: 05/05/2014, 20:59
Kernel: 3.12

Re: Scripts bash

Messaggio da fatopeo » 14/05/2014, 21:33

SOSTITUIRE GLI SPAZI IN UNDERSCORE NEI NOMI DI FILES E SOTTOCARTELLE
La particolarità di questo script è che non si limita a rinominare i file contenuti in una directory m riesce a rinominare anche le sotto-directory ed i relativi file partendo dal path in cui viene lanciato fino ad esaurire i file.
L’uso dello script è molto semplice, basta salvare il codice sottostante in un file di testo (ad esempio space2uscore) e dargli i permessi di esecuzione (chmod +x space2uscore)

Codice: Seleziona tutto

#!/bin/bash
#script che trasforma gli spazi nei file in underscore(_)
#Riesce a rinominare anche cartelle e sottocartelle
#Lascia invariate Maiuscole e minuscole
#se si vogliono cambiare maiuscole in minuscole basta cambiare
#tr 'A-Z ' 'A-Z_'` in tr 'A-Z ' 'a-z_'`
#Autore Lucio Zara (nick pennega)
#Sito www.spaghettilinux.org
#Mail pennega@gmail.com
#Versione 0.5
#Licenza GPL
 
#funzione usata per rinominare i file
RENAMEFILE() {
#$FILE non è necessario definirla come locale
local FILE=$1 #$1 è la 1° variabile passata alla funzione al momento della sua invocazione
#se non ho spazi nel nome file non lo devo rinominare
if echo $FILE | grep " " ; then
    NEWNAMEFILE=`echo $FILE | tr 'A-Z ' 'A-Z_'`
    #rinomino il file $NEWNAMEFILE contiene il nome del file
    #con gli spazi traformati in _
    mv "$FILE" $NEWNAMEFILE
fi
}
 
#questa è una funzione ricorsiva
RENAMEDIR() {
#$DIR è necessario definirla come locale
local DIR=$1
if echo $DIR | grep " " ; then
    NEWNAMEDIR=`echo $DIR | tr 'A-Z ' 'A-Z_'`
    mv "$DIR" $NEWNAMEDIR
else
    #se non ci sono spazi assegno a $NEWNAMEDIR il valor di $DIR
    NEWNAMEDIR=$DIR
fi
#Entro nella dir per verificare se ho altre dir o file
cd $NEWNAMEDIR
find -maxdepth 1 | while read d; do
    #il comando find mi restituisce tra i risultati anche la dir corrente ./
    #che non và considerata
    if [ "$d" != "." ]; then
        #verifico se $d è una directory
        if [ -d "$d" ]; then
            #se $d è una directory richiamo la funzione ricorsivamente
            RENAMEDIR "$d"
        else
            #se $d non è una directory richiamo la funzione RENAMEFILE
            RENAMEFILE "$d"
        fi
    fi
    done
#Visto che prima sono entrato in $NEWNAMEDIR adesso devo uscirne per poter continuare
cd ..
}
 
#MAIN
find -maxdepth 1 | while read l; do
    #il comando find mi restituisce tra i risultati anche la dir corrente ./
    #che non và considerata
    if [ "$l" != "." ]; then
        #verifico se ho una directory
        if [ -d "$l" ]; then
            #ricchiamo la funzione RENAMEDIR
            RENAMEDIR "$l"
        else
            #ricchiamo la funzione RENAMEFILE
            RENAMEFILE "$l"
        fi
    fi
done
FONTE: http://www.spaghettilinux.org/script/so ... underscore

Avatar utente
fatopeo
Messaggi: 22
Iscritto il: 05/05/2014, 20:59
Kernel: 3.12

Re: Scripts bash

Messaggio da fatopeo » 15/05/2014, 19:51

Partendo da questo script http://www.spaghettilinux.org/script/so ... underscore ne ho sviluppato un altro chiamato RESIZEIMG che ridimensiona le immagini con risoluzione maggiore ad una prefissata. Condizione necessaria per l'uso è che sia gìa installata la suite IMAGEMAGICK.
Per altre estensioni o risoluzioni basta modificare il vettore EXT e la costante SCALE.
Chi vuole lo può aggiornare o modificare a proprio gusto, rispettando cortesemente la mia paternità intellettuale, dato che questo post rappresenta la prima ed unica pubblicazione ufficiale di questo script, per cui se in futuro ne vedete simili, saranno derivati o copiaincollati da questo. Grazie.

Da terminale:
1. create lo script

Codice: Seleziona tutto

nano -w RESIZEIMG
2. copiate ed incollate queste righe:

Codice: Seleziona tutto

#!/bin/bash
#Script che ridimensiona le immagini con risoluzione superiore ad una prefissata
#Autore: Fatopeo
#Data: 15/05/2014
#Mail: fatopeo@gmail.com
#Versione: 0.1
#Licenza: GPL

#estensioni files più diffuse
EXT =( jpg JPG jpeg JPEG png PNG bmp BMP gif GIF psd PSD) 

#risoluzione prefissata
SCALE = "1280x1024>"
 
#Funzione usata per ridimensionare i file
RESIZEFILE() {
#$1 è la 1° variabile passata alla funzione al momento della sua invocazione
local FILE=$1 
#se l'estensione del file è di tipo grafico 
#allora ridimensiona se la risoluzione è maggiore di 1280x1024
for "${FILE##*.}" in ${EXT[*]} 
	do
		mogrify -resize $SCALE $FILE
	done
fi
}
 
#questa è una funzione ricorsiva
CD_DIR() {
#$DIR è necessario definirla come locale
local DIR=$1

#Entro nella dir per verificare se ho altre dir o file
cd $DIR
find -maxdepth 1 | while read d; do
    #il comando find mi restituisce tra i risultati anche la dir corrente ./
    #che non và considerata
    if [ "$d" != "." ]; then
        #verifico se $d è una directory
        if [ -d "$d" ]; then
            #se $d è una directory richiamo la funzione ricorsivamente
            CD_DIR "$d"
        else
            #se $d non è una directory richiamo la funzione RENAMEFILE
            RESIZEFILE "$d"
        fi
    fi
    done
#esco da $DIR 
cd ..
}
 
#MAIN
find -maxdepth 1 | while read l; do
    #il comando find mi restituisce tra i risultati anche la dir corrente ./
    #che non va considerata
    if [ "$l" != "." ]; then
        #verifico se ho una directory
        if [ -d "$l" ]; then
            #richiamo la funzione CD_DIR
            CD_DIR "$l"
        else
            #richiamo la funzione RESIZEFILE
            RESIZEFILE "$l"
        fi
    fi
done
echo "Finito!"
3. assegnate i permessi di esecuzione:

Codice: Seleziona tutto

chmode +x RESIZEIMG 
L'ho testato personalmente e funziona! yeah!

myfender
Messaggi: 2
Iscritto il: 06/10/2014, 11:44
Distribuzione: Centos
Kernel: 2.6
Architettura: i386

Re: Scripts bash

Messaggio da myfender » 06/10/2014, 11:48

Scusa ma il tuo script contiene degli errori, non funziona. Potresti modificarlo?

Grazie
fatopeo ha scritto:Partendo da questo script http://www.spaghettilinux.org/script/so ... underscore ne ho sviluppato un altro chiamato RESIZEIMG che ridimensiona le immagini con risoluzione maggiore ad una prefissata. Condizione necessaria per l'uso è che sia gìa installata la suite IMAGEMAGICK.
Per altre estensioni o risoluzioni basta modificare il vettore EXT e la costante SCALE.
Chi vuole lo può aggiornare o modificare a proprio gusto, rispettando cortesemente la mia paternità intellettuale, dato che questo post rappresenta la prima ed unica pubblicazione ufficiale di questo script, per cui se in futuro ne vedete simili, saranno derivati o copiaincollati da questo. Grazie.

Da terminale:
1. create lo script

Codice: Seleziona tutto

nano -w RESIZEIMG
2. copiate ed incollate queste righe:

Codice: Seleziona tutto

#!/bin/bash
#Script che ridimensiona le immagini con risoluzione superiore ad una prefissata
#Autore: Fatopeo
#Data: 15/05/2014
#Mail: fatopeo@gmail.com
#Versione: 0.1
#Licenza: GPL

#estensioni files più diffuse
EXT =( jpg JPG jpeg JPEG png PNG bmp BMP gif GIF psd PSD) 

#risoluzione prefissata
SCALE = "1280x1024>"
 
#Funzione usata per ridimensionare i file
RESIZEFILE() {
#$1 è la 1° variabile passata alla funzione al momento della sua invocazione
local FILE=$1 
#se l'estensione del file è di tipo grafico 
#allora ridimensiona se la risoluzione è maggiore di 1280x1024
for "${FILE##*.}" in ${EXT[*]} 
	do
		mogrify -resize $SCALE $FILE
	done
fi
}
 
#questa è una funzione ricorsiva
CD_DIR() {
#$DIR è necessario definirla come locale
local DIR=$1

#Entro nella dir per verificare se ho altre dir o file
cd $DIR
find -maxdepth 1 | while read d; do
    #il comando find mi restituisce tra i risultati anche la dir corrente ./
    #che non và considerata
    if [ "$d" != "." ]; then
        #verifico se $d è una directory
        if [ -d "$d" ]; then
            #se $d è una directory richiamo la funzione ricorsivamente
            CD_DIR "$d"
        else
            #se $d non è una directory richiamo la funzione RENAMEFILE
            RESIZEFILE "$d"
        fi
    fi
    done
#esco da $DIR 
cd ..
}
 
#MAIN
find -maxdepth 1 | while read l; do
    #il comando find mi restituisce tra i risultati anche la dir corrente ./
    #che non va considerata
    if [ "$l" != "." ]; then
        #verifico se ho una directory
        if [ -d "$l" ]; then
            #richiamo la funzione CD_DIR
            CD_DIR "$l"
        else
            #richiamo la funzione RESIZEFILE
            RESIZEFILE "$l"
        fi
    fi
done
echo "Finito!"
3. assegnate i permessi di esecuzione:

Codice: Seleziona tutto

chmode +x RESIZEIMG 
L'ho testato personalmente e funziona! yeah!

Avatar utente
mae89
Messaggi: 1333
Iscritto il: 22/12/2010, 10:25
Distribuzione: Fedora
Kernel: 3.16.9
Architettura: x86_64
Contatta:

Re: Scripts bash

Messaggio da mae89 » 06/10/2014, 19:37

myfender ha scritto:Scusa ma il tuo script contiene degli errori, non funziona. Potresti modificarlo?

Grazie
Quali errori ti restituisce?
Chi dice di non essere capace è perché probabilmente non ha mai provato.

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite