Vai al contenuto

Aiuto espressioni regolari in *nix


jeby

Messaggi Raccomandati:

quello di Artemis funziona, a parte ovviamente su alcuni file con pattern diversi (solo 2 cifre di numeri e trattini vari nel nome)

invece Loric il tuo mi mette uno / di troppo nel percorso file...

Mazda MX-5 20th anniversary "barbone edition" - Tutto quello che scrivo è IMHO

k21x8z.png

Link al commento
Condividi su altri Social

  • Risposte 37
  • Creato
  • Ultima Risposta

I più attivi nella discussione

Giorni di maggior attività

I più attivi nella discussione

quello di Artemis funziona, a parte ovviamente su alcuni file con pattern diversi (solo 2 cifre di numeri e trattini vari nel nome)

invece Loric il tuo mi mette uno / di troppo nel percorso file...

Cioè? I backslash di troppo non dovrebbero comprometterne la funzionalità. Ti dà errori?

Alfiat Bravetta senza pomello con 170 cavalli asmatici che vanno a broda; pack "Terrone Protervo" (by Cosimo) contro lo sguardo da triglia. Questa è la "culona".

Link al commento
Condividi su altri Social

Cioè? I backslash di troppo non dovrebbero comprometterne la funzionalità. Ti dà errori?

mi dà errore sui file tipo /home/pi/percorso/archivio//nomefile

Mazda MX-5 20th anniversary "barbone edition" - Tutto quello che scrivo è IMHO

k21x8z.png

Link al commento
Condividi su altri Social

quello di Artemis funziona, a parte ovviamente su alcuni file con pattern diversi (solo 2 cifre di numeri e trattini vari nel nome)

invece Loric il tuo mi mette uno / di troppo nel percorso file...

Fammi qualche esempio dei nomi fuori pattern, che voglio vedere se si può sistemare per prendere dentro anche loro :)

"Fico, io ti rispondo che al buio tutti i gatti sembrano leopardi e che non bisogna mai comprare un gatto in un sacco. C'entrano qualcosa? Probabilmente no, esattamente come la tua metafora." [Loric]

Link al commento
Condividi su altri Social

mi dà errore sui file tipo /home/pi/percorso/archivio//nomefile

Puoi incollare l'output dello script? Il doppio / nel path da Posix è equivalente al singolo. Che linux è?

Modificato da loric

Alfiat Bravetta senza pomello con 170 cavalli asmatici che vanno a broda; pack "Terrone Protervo" (by Cosimo) contro lo sguardo da triglia. Questa è la "culona".

Link al commento
Condividi su altri Social

Domani riprovo e vi dico!

Il sistema raspbian wheezy

Prima o poi riciclerò gli script per l'archivio di fumetti e di serie TV!

Il problema dei doppi / (che comunque NON dovrebbe essere un problema) lo risolvi rimuovendo il / finale dalle variabili MYPATH e DESTDIR nelle prime righe dello script.

Però sono veramente curioso di conoscere l'errore :)

Alfiat Bravetta senza pomello con 170 cavalli asmatici che vanno a broda; pack "Terrone Protervo" (by Cosimo) contro lo sguardo da triglia. Questa è la "culona".

Link al commento
Condividi su altri Social

ecoomi!

Artemis: ho fatto rigirare gli script con queste serie di file:

cena cugini X-MAS 001 (20071222).jpg

lucca comics 001 (20051030).jpg

museo scienza 01 (20070805).jpg

sposta solo la serie di lucca comics, la serie con il - e la serie con solo 2 cifre nel numero di avanzamento non le sposta

loric:

hai ragione, non c'entrav il doppio /, l'errore è mio :lol:

Avevo messo MYPATH e DESTDIR uguali tra loro e l'errore che mi dava era:


mkdir: impossibile creare la directory "/home/pi/sambashare/Prova//Gallico_Marina_019_(20100810)_mie.jpg": File già esistente
mv: accesso a "/home/pi/sambashare/Prova//Gallico_Marina_019_(20100810)_mie.jpg/Gallico Marina 019 (20100810) mie.jpg": Non è una directory

adesso ho settato

MYPATH="$HOME/sambashare/prova/"

DESTDIR="$HOME/sambashare/prova/mydir/"

con dentro gli stessi file con cui ho fatto girare lo script di Artemis, non mi dà nessun errore ma... non fa nulla! allora mi sono accorto che nella tua regex c'è ".*[0-9][0-9][0-9]_.*" che non pesca nulla, forse perché i file sono già stati riscritti correttamente... Ho tolto il _ e funziona.

In compenso muove anche i file che quello di Artemis non muove, ma anche il tuo ha problemi con file con numerazione solo di 2 cifre, nel senso che crea una cartella per ogni file.

Modificato da jeby

Mazda MX-5 20th anniversary "barbone edition" - Tutto quello che scrivo è IMHO

k21x8z.png

Link al commento
Condividi su altri Social

ecoomi!

Artemis: ho fatto rigirare gli script con queste serie di file:

cena cugini X-MAS 001 (20071222).jpg

lucca comics 001 (20051030).jpg

museo scienza 01 (20070805).jpg

sposta solo la serie di lucca comics, la serie con il - e la serie con solo 2 cifre nel numero di avanzamento non le sposta

loric:

hai ragione, non c'entrav il doppio /, l'errore è mio :lol:

Avevo messo MYPATH e DESTDIR uguali tra loro e l'errore che mi dava era:


mkdir: impossibile creare la directory "/home/pi/sambashare/Prova//Gallico_Marina_019_(20100810)_mie.jpg": File già esistente
mv: accesso a "/home/pi/sambashare/Prova//Gallico_Marina_019_(20100810)_mie.jpg/Gallico Marina 019 (20100810) mie.jpg": Non è una directory

adesso ho settato

MYPATH="$HOME/sambashare/prova/"

DESTDIR="$HOME/sambashare/prova/mydir/"

con dentro gli stessi file con cui ho fatto girare lo script di Artemis, non mi dà nessun errore ma... non fa nulla! allora mi sono accorto che nella tua regex c'è ".*[0-9][0-9][0-9]_.*" che non pesca nulla, forse perché i file sono già stati riscritti correttamente... Ho tolto il _ e funziona.

In compenso muove anche i file che quello di Artemis non muove, ma anche il tuo ha problemi con file con numerazione solo di 2 cifre, nel senso che crea una cartella per ogni file.

Chiaro, la mia regex era più stringente.

La versione qui sotto corregge la regex per lo spostamento comprendendo anche le tipologie che non riuscivi a spostare.


#!/bin/bash

dir=`ls -l | grep '^-' | awk -v N=9 '{sep=""; for (i=N; i<=NF; i++) {printf("%s%s",sep,$i); sep=OFS}; printf("\n")}'`

while read -r file;
do
if [[ $file =~ (_|%28|%29) ]];
then
oldFile="$file"
file=$(echo $file | sed 's/\_/\ /g')
file=$(echo $file | sed 's/%28/\(/g')
file=$(echo $file | sed 's/%29/\)/g')
echo "** Renaming file $oldFile to $file"
mv "$oldFile" "$file"
fi
if [[ $file =~ ^([[:alpha:][:blank:]\-]+)[0-9]{2,3}.*$ ]];
then
folder=`echo "${BASH_REMATCH[1]}" | awk '$1=$1'`
if [ ! -d "$folder" ];
then
mkdir "$folder"
echo "** Directory $folder created"
fi
echo "** Moving file $file to $folder"
mv "$file" "$folder"
fi

done <<< "$dir"

"Fico, io ti rispondo che al buio tutti i gatti sembrano leopardi e che non bisogna mai comprare un gatto in un sacco. C'entrano qualcosa? Probabilmente no, esattamente come la tua metafora." [Loric]

Link al commento
Condividi su altri Social

Tutti i file hanno estensione jpg (o comunque una lista fissa di estensioni)? Perché se è così, tutto diventa molto più semplice.

Comunque la modifica che hai fatto al mio script NON va bene, perché dopo la modifica la regex matcha i file giusti ma anche quelli sbagliati con 3 numeri di fila da qualche parte nel nome.

Un altro elemento di criticità è che il mio script creava le subdirectory dove salvare i file ipotizzando una struttura di questo genere:

<Una o più parole><spazio><tre numeri><_> etc.

Scopro invece che alcuni file non hanno lo spazio ma il trattino prima dei numeri.

In tutta franchezza l'unico modo in cui possiamo aiutarti è se fai un copia/incolla di una delle directory che intendi processare, così vediamo esattamente di cosa si sta parlando.

Continuo a trovare un po' pericoloso basare il tutto sull'output di ls, per di più salvato in una variabile: basta un nome che, per esempio, contiene il carattere '\n' (astrattamente possibile, è un carattere legale) ed il tutto va a donnine allegre. L'unico carattere che puoi essere assolutamente certo di non trovare in un nome di file è il carattere NUL ($'0') ed è quello che normalmente si usa come separatore di lista in questi casi (cfr. -print0 nella riga col find).

Modificato da loric

Alfiat Bravetta senza pomello con 170 cavalli asmatici che vanno a broda; pack "Terrone Protervo" (by Cosimo) contro lo sguardo da triglia. Questa è la "culona".

Link al commento
Condividi su altri Social

Crea un account o accedi per lasciare un commento

Devi essere iscritto per commentare e visualizzare le sezioni protette!

Crea un account

Iscriviti nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

×
×
  • Crea Nuovo...

 

Stiamo sperimentando dei banner pubblicitari a minima invasività: fai una prova e poi facci sapere come va!

Per accedere al forum, disabilita l'AdBlock per questo sito e poi clicca su accetta: ci sarai di grande aiuto! Grazie!

Se non sai come si fa, puoi pensarci più avanti, cliccando su "ci penso" per continuare temporaneamente a navigare. Periodicamente ricomparità questo avviso come promemoria.