[Risolto] Rinominare directory e primo file all’interno della stessa

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
LuisGis
Prode Principiante
Messaggi: 74
Iscrizione: venerdì 10 luglio 2020, 19:10
Sesso: Maschile

[Risolto] Rinominare directory e primo file all’interno della stessa

Messaggio da LuisGis »

Salve,
Ho molte cartelle contenenti 1 file .jpg e circa 15/30 files musicali (tutti in formato wav) la maggior parte sono accordi o piccoli brani da me composti.
Li sto catalogando ed ordinando.
Premetto che i nomi dei files sono senza significato tipo abc.wav; 01012021.wav ecc.

Vorrei fare uno script che per tutte le cartelle vada a leggere il nome del file immagine all’interno di ogni singola cartella usandolo per rinominare il primo file .wav e la directory.
Faccio un esempio

Attuale:
./001
001.wav
123.wav
01022021.wa
Gioia.jpg
…..
con lo script diventerà:
./Gioia
Gioia.wav
123.wav
01022021.wa
Gioia.jpg
……

Potete aiutarmi?
Grazie
Ultima modifica di LuisGis il domenica 28 marzo 2021, 6:30, modificato 3 volte in totale.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da vaeVictis »

Le immagini sono tutte in jpg?
Come lo individui il primo file della directory? Ha una logica il nome dato?
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
LuisGis
Prode Principiante
Messaggi: 74
Iscrizione: venerdì 10 luglio 2020, 19:10
Sesso: Maschile

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da LuisGis »

Si, le immagini sono tutte in jpg
Il primo file, ovvero può essere un qualsiasi file.
non c'è nessuna logica su tutti i nomi dei files all'interno della cartella.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da UbuNuovo »

Per rinominare le directory non ci sono problemi, per i file invece c'è il problema dell'ordinamento.
Il file manager ordina in modo diverso rispetto al terminale, mi ero appuntato il sort da usare, ma ora devo andare via, dopo cena lo cerco.
Per le directory basta una cosa del genere:

Codice: Seleziona tutto

#!/bin/bash

dir_file='./musica/'

while read f;do 
    dir_all=${f%/*} #               "./musica/001"
    dir_base=${dir_all%/*} #        "./musica"
    dir_fine=${dir_all##*/} #       "001"
    nome_ext=${f##*/} #             "Gioia.jpg"
    nome=${nome_ext%.*} #           "Gioia"
    echo mv "$dir_all" "$dir_base/$nome"
done < <(find "$dir_file" -type f -iname '*.jpg')
Questo simula soltanto la rinomina, c'è un echo prima di mv.

@Vae: Ho usato pure Bash al posto dei miei soliti grep -P, mi sto sforzando ma è molto meno pratico. :D
Salva l'Ucraina! 🇺🇦
LuisGis
Prode Principiante
Messaggi: 74
Iscrizione: venerdì 10 luglio 2020, 19:10
Sesso: Maschile

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da LuisGis »

OK, grazie
Poi provo lo script
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da vaeVictis »

Il file manager ordina in modo diverso
Temo dipenda anche dalle impostazioni scelte dall'utente
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da UbuNuovo »

Naturalmente ordinati per nome.
Non lo trovo! :(
Provate creare una directory, aprirci un terminale ed eseguire:

Codice: Seleziona tutto

mkdir test
cd test
touch {1..20}_pio.txt
touch {001..020}_pio.txt
cd ..
ls test
ls -1v test
find test -type f | sort -n
find test -type f | sort -V
caja test
caja è il mio file manager,( mettete il vostro), che con ordinamento per nome mostra i file nella sequenza:
1_pio.txt, 001_pio.txt, 2_pio, 002_pio.txt, ....

Eseguendo ottengo:

Codice: Seleziona tutto

8-) mkdir test
8-) cd test
8-) touch {1..20}_pio.txt
8-) touch {001..020}_pio.txt
8-) cd ..
8-) ls test
001_pio.txt  008_pio.txt  015_pio.txt  11_pio.txt  18_pio.txt  5_pio.txt
002_pio.txt  009_pio.txt  016_pio.txt  12_pio.txt  19_pio.txt  6_pio.txt
003_pio.txt  010_pio.txt  017_pio.txt  13_pio.txt  1_pio.txt   7_pio.txt
004_pio.txt  011_pio.txt  018_pio.txt  14_pio.txt  20_pio.txt  8_pio.txt
005_pio.txt  012_pio.txt  019_pio.txt  15_pio.txt  2_pio.txt   9_pio.txt
006_pio.txt  013_pio.txt  020_pio.txt  16_pio.txt  3_pio.txt
007_pio.txt  014_pio.txt  10_pio.txt   17_pio.txt  4_pio.txt
8-) ls -1v test
001_pio.txt
1_pio.txt
002_pio.txt
2_pio.txt
003_pio.txt
...

8-) find test -type f | sort -n
test/001_pio.txt
test/002_pio.txt
test/003_pio.txt
...
8-) find test -type f | sort -V
test/001_pio.txt
test/1_pio.txt
test/002_pio.txt
...
Avevo trovato il modo per avere lo stesso ordinamento, non era complicato, ma per oggi sono abbastanza fuso, mi fermo qua.
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da UbuNuovo »

@LuisGis: hai fatto la prova del post sopra?
Ho diversi file manager, di quelli che ho provato (Caja, Nautilus, Thunar, Nemo, Dolphin), l'ordinamento per nome è "corretto" solo con Dolphin.
Non ho trovato il modo di ordinare in modo simil file manager; il più simile è sort-g ma non è uguale.
Concludendo se non hai Dolphin si deve trovare un altro modo per individuare il primo file.
Per esempio se il primo file in elenco è anche il primo file creato/modificato si può sfruttare quella caratteristica.
Salva l'Ucraina! 🇺🇦
LuisGis
Prode Principiante
Messaggi: 74
Iscrizione: venerdì 10 luglio 2020, 19:10
Sesso: Maschile

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da LuisGis »

Non ho Dolphin.
Nel pomeriggio controllo se il primo file modificato o creato corrisponde al primo file dell'elenco.
Però, non ho capito una cosa:
non è possibile leggere il nome di un file qualsiasi ed usarlo come file da modificare?
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da UbuNuovo »

LuisGis ha scritto:
sabato 27 marzo 2021, 9:22
...
non è possibile leggere il nome di un file qualsiasi ed usarlo come file da modificare?
Ora non ho capito io cosa vuoi dire.

edit:
Mi è venuto un dubbio.
Devi rinominare il primo file, oppure uno qualunque e poi farlo visualizzare come primo file nel file manager?
In questo caso si dovrebbe mettere un prefisso tipo 0_, quindi rinominare un file in 0_Gioia.wav.
Salva l'Ucraina! 🇺🇦
LuisGis
Prode Principiante
Messaggi: 74
Iscrizione: venerdì 10 luglio 2020, 19:10
Sesso: Maschile

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da LuisGis »

Devo rinominare un file qualsiasi e non deve essere visualizzato come primo file nel file manager.
l'importante che per ogni subdirectory presente lo script rinomini sia la subdirectory che un qualsiasi file.wav con lo stesso nome del file.jpg presente nell'interno della stessa.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da UbuNuovo »

LuisGis ha scritto:
sabato 27 marzo 2021, 12:55
Devo rinominare un file qualsiasi e non deve essere visualizzato come primo file nel file manager.
l'importante che per ogni subdirectory presente lo script rinomini sia la subdirectory che un qualsiasi file.wav con lo stesso nome del file.jpg presente nell'interno della stessa.
Non è quello che avevi detto all'inizio!
Per la prossima volta; cerca di spiegare in modo corretto cosa vuoi ottenere, non possiamo leggerti la mente.

Lo script che segue, rinomina le directory, e tutti i sui file wav, con il nome del file jpg; naturalmente i file vengono anche numerati.
Occhio! Prova su una copia dei file, qua non ci sono simulazioni!

Ho provato con una struttura di partenza così:

Codice: Seleziona tutto

8-) tree -F
.
├── musica/
│   ├── 001/
│   │   ├── 001.wav
│   │   ├── 01022021.wav
│   │   ├── 123.wav
│   │   └── Gioia.jpg
│   └── 002/
│       ├── 002.wav
│       ├── 127.wav
│       ├── 2021.wav
│       └── Dolores.jpg
├── script1.sh*
└── script2.sh*

3 directories, 10 files
8-)
dopo aver eseguito lo script, ottengo:

Codice: Seleziona tutto

8-) tree -F
.
├── musica/
│   ├── Dolores/
│   │   ├── Dolores_1.wav
│   │   ├── Dolores_2.wav
│   │   ├── Dolores_3.wav
│   │   └── Dolores.jpg
│   └── Gioia/
│       ├── Gioia_1.wav
│       ├── Gioia_2.wav
│       ├── Gioia_3.wav
│       └── Gioia.jpg
├── script1.sh*
└── script2.sh*

3 directories, 10 files
8-) 
Lo script:

Codice: Seleziona tutto

#!/bin/bash

dir_file='./musica/'

while read f;do 
    dir_all=${f%/*} #               "./musica/001"
    dir_base=${dir_all%/*} #        "./musica"
    dir_fine=${dir_all##*/} #       "001"
    nome_ext=${f##*/} #             "Gioia.jpg"
    nome=${nome_ext%.*} #           "Gioia"
    [ -d "$dir_base/$nome" ] || mv "$dir_all" "$dir_base/$nome"
    i=1
    while read wav;do
       mv "$wav" "$dir_base/$nome/${nome}_$i.wav"
		((i++))
    done < <(find "$dir_base/$nome" -type f -iname '*.wav')
done < <(find "$dir_file" -type f -iname '*.jpg')

exit
Salva l'Ucraina! 🇺🇦
LuisGis
Prode Principiante
Messaggi: 74
Iscrizione: venerdì 10 luglio 2020, 19:10
Sesso: Maschile

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da LuisGis »

Scusa, mi sono espresso male,
anche se all'inizio avevo precisato:
Si, le immagini sono tutte in jpg
Il primo file, ovvero può essere un qualsiasi file.
non c'è nessuna logica su tutti i nomi dei files all'interno della cartella.
Lo script deve rinominare la directory e solamente un file .wav di ogni directory
Il risultato dovrebbe essere:
├── musica/
│ ├── Dolores/
│ │ ├── Dolores.wav
│ │ ├── 01022021.wav
│ │ ├── 123.wav
│ │ └── Dolores.jpg
│ └── Gioia/
│ ├── 002.wav
│ ├── 127.wav
│ ├── Gioia.wav
│ └── Gioia.jpg
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Rinominare directory e un file qualsiasi all’interno della stessa

Messaggio da UbuNuovo »

Ok, ultimo script.

Codice: Seleziona tutto

#!/bin/bash

dir_file='./musica/'

while read f;do 
    dir_all=${f%/*} #               "./musica/001"
    dir_base=${dir_all%/*} #        "./musica"
    dir_fine=${dir_all##*/} #       "001"
    nome_ext=${f##*/} #             "Gioia.jpg"
    nome=${nome_ext%.*} #           "Gioia"
    [ -d "$dir_base/$nome" ] || mv "$dir_all" "$dir_base/$nome"
    wav=$(find "$dir_base/$nome" -type f -iname '*.wav' | head -1)
    mv "$wav" "$dir_base/$nome/${nome}.wav"
done < <(find "$dir_file" -type f -iname '*.jpg')

exit
Mi era rimasto _$i, l'ho levato
Salva l'Ucraina! 🇺🇦
LuisGis
Prode Principiante
Messaggi: 74
Iscrizione: venerdì 10 luglio 2020, 19:10
Sesso: Maschile

Re: Rinominare directory e primo file all’interno della stessa

Messaggio da LuisGis »

Funziona correttamente!
Grazie
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 7 ospiti